【发布时间】:2019-01-03 20:47:01
【问题描述】:
我使用 java Process.exec 启动 shell 脚本(出于某种原因),无论脚本本身的退出值如何,它们总是返回 0 退出值(我可以通过在 OS shell 中运行所述脚本来检查。有关其他信息,那些脚本使用 gradle-node-plugin 运行 gradle 任务。对此问题有任何指示吗?
总体来说,设置如下:
软件
Linux 桌面 4.4.0-130-generic #156~14.04.1-Ubuntu SMP Thu Jun 14 13:51:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux`
java 版本“1.8.0_171” Java(TM) SE 运行时环境 (build 1.8.0_171-b11) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.171-b11,混合模式)`
Shell 脚本是用
执行的Process process = Runtime.getRuntime().exec(new String[]{"sh", "-c", testScript});
返回值是用test.exitValue()获得的,看起来总是0。
Shell 脚本调用 gradle ./gradlew project:clean project:test。
Gradle 脚本依赖于gradle-node-plugin
plugins {
id "com.moowork.node" version "1.2.0"
}
task test(type: NodeTask) {
script = file('./node_modules/mocha/bin/mocha')
args = ['test/sometest.js']
}
【问题讨论】:
-
请把代码贴出来,不然我们也猜猜Java是怎么想的
-
@Lino 我添加了一些代码 sn-ps
-
1) 为了尽快获得更好的帮助,请发帖 minimal reproducible example 或 Short, Self Contained, Correct Example。 2) 另请参阅When Runtime.exec() won't,了解有关正确创建和处理流程的许多好技巧。然后忽略它引用
exec并使用ProcessBuilder创建进程。还将String arg分解为String[] args以解决包含空格字符的路径之类的问题。 -
在调用gradlew之前尝试为环境变量
GRADLE_EXIT_CONSOLE设置一个值? -
@LittleSanti 这很好地解决了我的问题 - 哇!有趣的事实是,互联网上没有太多信息,但它存在于 gradle 的源代码中(以及每个 gradlew 文件中!)。想知道您是如何获得这些知识的,但同时请发表您的评论作为答案,以便我接受。
标签: java gradle process gradle-node-plugin