我想從一個java程序中運行一個groovy腳本作爲一個單獨的進程(爲了避免jar衝突問題)。如何從Java運行groovy作爲一個獨立的進程?
這是我到目前爲止有:
public static void runGroovyScript(Path scriptPath, String... args) {
try {
List<String> argsList = newArrayList();
argsList.add("groovy");
argsList.add(scriptPath.toAbsolutePath().toString());
Collections.addAll(argsList, args);
Process process = Runtime.getRuntime().exec(argsList.toArray(new String[argsList.size()]));
// Note - out input is the process' output
String input = Streams.asString(process.getInputStream());
String error = Streams.asString(process.getErrorStream());
logger.info("Groovy output for " + Arrays.toString(args) + "\r\n" + input);
logger.info("Groovy error for " + Arrays.toString(args) + "\r\n" + error);
int returnValue = process.waitFor();
if (returnValue != 0) {
throw new RuntimeException("Groovy process returned " + returnValue);
}
} catch (Throwable e) {
throw new RuntimeException("Failure running build script: " + scriptPath + " " + Joiner.on(" ").join(args), e);
}
}
的問題,當然,是groovy
沒有一個公認的命令。它由於環境變量PATH
而從命令行運行,並解決了cmd.exe的問題。在Linux上,有一個不同的解決機制。什麼是尋找groovy可執行文件的平臺無關的方式,以便將它傳遞給Runtime.exec()
?
我認爲這應該回答你的問題:http://stackoverflow.com/questions/378905/how-to-invoke-groovy-with-java-from-command-line –
@SamuelAudet - 我不確定它確實。 – ripper234
好吧,也許你不熟悉'java.home'系統屬性,它包含'bin'目錄下的'java'可執行文件? –