我有一个 gradle 任务迭代文件树并对每个匹配的文件进行 javaexec 调用:
task runFeatures {
doLast {
fileTree(dir: 'src/test/resources/features', include:'**/*.feature').each { file ->
javaexec {
main = "cucumber.api.cli.Main"
classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
args = [
...
'--plugin', json:build/reports/cucumber/${file.filename}",
...
file.absolutePath
]
}
generateReportFromJson()
}
}
这样做的原因是使用 GPar 同时运行 cucumber/geb 测试。
作为对 cucumber 的调用,预计这些 javaexec 将返回错误,而且很明显,测试框架需要响应错误而不是当场死亡。
但据我所知,一旦功能文件从 javaexec 返回错误代码,gradle 就会立即终止整个任务(即本例中的整个测试运行),而不是向任务提供有关如何执行的选项。对失败做出响应。在这种情况下,如果单个场景失败,则永远不会调用 generateReportFromJson()
。
有一个帖子here作者为 javaexec 编写了一个补丁来解决这个问题。那是在 2012 年,但我找不到那个故事的结局(如果有的话)。
因此,我能看到的唯一方法是从 shell 内调用 gradle 子任务,并让子任务执行自动执行 like this 。但至少可以说,这似乎很笨拙,特别是当我的代码需要在 Linux 和 Windows 上运行时。
我有什么遗漏吗?
最佳答案
您可以使用 ignoreExitValue
属性配置 javaexec,使其不会导致构建失败:
javaexec {
...
ignoreExitValue = true
}
关于multithreading - 我可以停止 javaexec 失败并终止 Gradle 任务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30090850/