2010-03-11 6 views
9

ich in der Regel baut mein Projekt mit diesen beiden Befehlen von der Kommandozeile ausgeführt werden (dos), wie zu benutzen() in groovy ausführt jeden Befehl

G:\> cd c: 
C:\> cd c:\my\directory\where\ant\exists 
C:\my\directory\where\ant\exists> ant -Mysystem 
... 
..... 
build successful 

Was, wenn ich das Obige von groovy stattdessen zu tun? groovy hat execute() Methode aber im Anschluss an für mich nicht funktioniert:

def cd_command = "cd c:" 
def proc = cd_command.execute() 
proc.waitFor() 

es Fehler gibt:

Caught: java.io.IOException: Cannot run program "cd": CreateProcess error=2, The 
system cannot find the file specified 
     at ant_groovy.run(ant_groovy.groovy:2) 

Antwort

5

Nach diesem thread (2. Teil), "cd c:".execute() versucht genannt, ein Programm auszuführen cd das ist kein Programm, sondern ein eingebauter Shell-Befehl.

Die Abhilfe wäre Verzeichnis zu ändern, wie unten (nicht getestet):

System.setProperty("user.dir", "c:")

3
"your command".execute(null, /the/dir/which/you/want/to/run/it/from) 

sollte das tun, was man wollte.

13

Oder mehr explizit, ich denke binil Lösung

"your command".execute(null, new File("/the/dir/which/you/want/to/run/it/from")) 
4

Dank Noel und Binil, ich hatte ein ähnliches Problem mit einem Build Maven lesen sollte.

projects = ["alpha", "beta", "gamma"] 

projects.each{ project -> 
    println "*********************************************" 
    println "now compiling project " + project 
    println "cmd /c mvn compile".execute(null, new File(project)).text 
} 
Verwandte Themen