# Kann man Ant über Java aufrufen?



## Bartleby40K (19. März 2007)

Hallo zusammen,

ich arbeite grade an meinem Abschlussprojekt und suche nach einer Möglichkeit, Ant über Java aufzurufen. Genauer gesagt, soll Ant eine Build.xml verarbeiten.
Ich finde über Google viele Seiten die mir erklären wie ich Ant benutze und wie die ganzen Build-Files ausehen sollen, aber nicht wie ich aus einer Java-Anwendung heraus Ant benutze.

Kann mir da jemand von euch weiterhelfen?

Greetz

Bartleby40K


----------



## zeja (19. März 2007)

Normalerweise benutzt man ant auch nicht aus einer Java-Anwendung heraus sondern benutzt es um eine Anwendung durch kompilieren, jar erstellen etc erst zu erstellen.

Wenn du es aus Java Aufrufen möchtest kannst du dies mit dem ProcessBuilder oder Runtime.exec realsieren. Was du übergeben musst findest du unter Apache Ant User Manual: Command Line


----------



## Bartleby40K (20. März 2007)

Hi,

erstmal danke für die Antwort, leider muss ich sagen das es nicht funktioniert. Ich rufe Ant so auf:


```
Runtime.getRuntime().exec("ant –f build.xml");
```

Der Aufruf "ant –f build.xml" funktioniert über die DOS-Box einwandfrei, über den Aufruf aus Java heraus passiert gar nichts 
Folgende Fehlermeldung spuckt er aus:


```
java.io.IOException: CreateProcess: ant –f build.xml error=2
```

Weisst du vielleicht woran es liegen könnte?

Greetz

BArtleby40K


----------



## Thomas Darimont (20. März 2007)

Hallo,

ich denke der ant Aufruf bekommt einfach nicht das richtige Working Directory mit...
schau mal hier:
http://www.tutorials.de/forum/java/262592-batch-file-ausfuehren.html

Gruß Tom


----------



## Bartleby40K (20. März 2007)

Hi nochmal,

erstmal danke für den Tip, hatte den Beitrag nicht gefunden, nur leider funktioniert auch dies nicht. habe den code wie folgt übernommen:


```
File scripFile = new File("c:/tmp/ant.bat");
ProcessBuilder processBuilder = new ProcessBuilder(scripFile.getAbsolutePath());
processBuilder.directory(scripFile.getParentFile());
Process process = processBuilder.start();
Scanner scanner = new Scanner(process.getInputStream());
while(scanner.hasNextLine()){
          System.out.println(scanner.nextLine());
}
scanner.close();
System.out.println(process.waitFor());
```

Wenn ich das so laufen lassen, bekomme ich eine Endlosschleife, anscheinend hat der scanner immer eine nextLine(). Das ganze habe ich dann soweit abgespeckt:


```
File scripFile = new File("c:/tmp/ant.bat");
ProcessBuilder processBuilder = new ProcessBuilder(scripFile.getAbsolutePath());
processBuilder.directory(scripFile.getParentFile());
Process process = processBuilder.start();
```

Es passiert wieder nichts, wie am Anfang 

Hab grade rausgefunden das es anscheinend an der .bat-Datei liegt. In meiner ant.bat steht nichts anderes als


```
ant -f c:\tmp\build.xml
```

Das einzige was aber passiert wenn ich die .bat von der Konsole aus ausführe, ist, dass dieser Ant-Aufruf immer wieder ausgegeben statt ausgeführt wird. Das erklärt auch warum der scanner immer die nextLine hat, aber warum führt er das nicht einfach aus?

  Bin grad irgendwie verwirrt  

Greetz

Bartleby


----------



## Bartleby40K (21. März 2007)

Ok, ich hab rausgefunden was es war, http://www.tutorials.de/forum/java/262592-batch-file-ausfuehren.html war genau was ich gesucht habe.

Danke 

Greetz

Bartleby


----------

