我正在尝试从 java 程序中运行一个 groovy 脚本,作为一个单独的进程(为了避免 jar 冲突问题)。
这是我到目前为止所拥有的:
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()
?