2010-03-11 9 views
9

je bâtirai habituellement mon projet à l'aide de ces deux commandes de ligne de commande (dos)comment utiliser execute() Groovy pour exécuter une commande

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

Que faire si je veux faire ce qui précède de groovy à la place? groovy a méthode execute() mais suivante ne fonctionne pas pour moi:

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

il donne l'erreur:

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) 

Répondre

5

Selon cette thread (2ème partie), "cd c:".execute() tente d'exécuter un programme appelé cd qui est pas un programme mais une commande shell intégrée.

La solution serait de changer de répertoire comme ci-dessous (non testé):

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

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

devrait faire ce que vous vouliez.

13

Ou plus explicitement, je pense que la solution de binil devrait lire

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

Merci Noel et Binil, j'ai eu un problème similaire avec un Maven de construction.

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

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