这里有奇怪的行为。下面的Groovy代码片段(由Java文件从jar文件执行)用于启动一个始终必须运行的控制台程序。它在Java 1.7.0_80和Groovy 2.3.10下运行时完美启动。它使用'envList'的原因是,如果检测到控制台应用程序已经消失,那么它将被其他程序随后调用。第二部分也适用于那些Java和Groovy版本。在Java 8下运行时,此Groovy代码无法运行
List envList = ['JVM_GC_OPTS=', 'JVM_SIZE_PERM=', 'JVM_SIZE=']
String workingDir = "${someDir}/console/bin"
def console = ['/bin/bash', '-c',
"${someDir}/console/bin/console.sh start"].execute(envList, new File(workingDir))
console.waitForOrKill(30000)
当Java升级到1.8.0_65时,第一个用法不再起作用。但是,如果手动启动(即手动运行shell脚本),那么可以测试第二个用法 - 该工作正常。我无法弄清楚如何从程序使用中看到shell脚本的输出。由于它在命令行中工作,所以我没有任何错误信息 - 所有各种日志文件都是干净的,没有ERROR或Exceptions。
难住了这个问题,尽管我不希望明确的答案,任何建议什么尝试或如何进行会帮助我极大。
它说什么,如果你加上'console.consumeProcessOutput(的System.out,System.err的)'前'waitForOrKill'? –
奇怪的是,它为Java 1.7和1.8提供了相同的输出(来自shell脚本)。我正在尝试捕获现在两种用法的所有环境变量。 – JoeG
Java 8没有PermGen。 (不清楚JVM_SIZE_PERM的用途) – Jayan