2017-08-21 5 views
0

J'explore Groovy sur Windows 10 et lorsque j'utiliseappels système en Groovy échoue

"java -version".execute().text 

je reçois pas de sortie et sur l'inspection de la sortie d'erreur en utilisant:

def pb = new ProcessBuilder("java -version").redirectErrorStream(true); 
def result = pb.start() 
println result.text 

il va:

Caught: java.io.IOException: Cannot run program "java -version": CreateProcess error=2, Den angivne fil blev ikke fundet 
java.io.IOException: Cannot run program "java -version": CreateProcess error=2, Den angivne fil blev ikke fundet 
at java_lang_ProcessBuilder$start$0.call(Unknown Source) 
at test$_run_closure2.doCall(test.groovy:59) 
at test.run(test.groovy:51)                        

Il semble que Groovy ignore complètement le PATH et ne recherche que dans le répertoire courant. Par exemple, si je crée un fichier batch dans le même répertoire, Groovy l'exécutera. Cependant, si j'essaie de lui passer des arguments, il échoue. Il semble que Groovy interprète les arguments dans le cadre du nom de fichier.

Il se sent comme Groovy est soit vulgairement inepte ou j'aborde ce problème dans le mauvais sens ...

Je suis habitué à faire system("java -version") en Ruby, donc ce que la façon de le faire idiomatiques en Groovy?

Répondre

1
"java -version".execute().text 

Ne vous donne pas une sortie, parce que cette commande l'écrit dans stdout. (Par exemple rien java -version 2>/dev/null imprime)

def pb = new ProcessBuilder("java -version").redirectErrorStream(true) 

travaillerais, mais l'erreur il est en fait, que vous essayez d'exécuter le programme java -version, qui n'existe pas. Donc, une façon d'aller ici est:

def pb = new ProcessBuilder("java", "-version").redirectErrorStream(true)