multithreading - 我可以停止 javaexec 失败并终止 Gradle 任务吗?

标签 multithreading gradle geb

我有一个 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/

相关文章:

java - AtomicInteger 是基于JNI 实现的吗?

python - 如何在要抓取的 url 列表中安全地执行多线程?

对于低于 Lollipop 的 Android 版本,Android 仪器测试失败

eclipse - 您的gradle版本太旧

java - 在 Geb 和 Spock 测试中无法删除 cookie

testing - 如何检查是否在 geb 中找到 href 元素

python - 在 Django 中,如何调用启动时间较慢的子进程

multithreading - 在pthread中,如何可靠地将信号传递给另一个线程?

Android Gradle : Change Version Code for each Build Type

jquery - 如何通过geb测试select2