在Gradle中,如果没有测试失败,如何运行所有测试然后发布?

时间:2014-02-12 18:38:57

标签: gradle

我希望能够运行所有测试,如果没有测试失败,则发布。即使某些测试失败,任务依赖图中的AFAICT gradlew --continue test publish也会发布。 ignoreFailure = true是否正确使用?

编辑:该项目是一个多模块项目。我希望项目中的所有测试都能运行,如果其中任何一个失败,那么构建不应该继续发布。

2 个答案:

答案 0 :(得分:1)

如果发生测试错误,

The --continue option正好用于阻止构建失败。只需删除此选项即可。默认情况下,如果测试未通过,构建将失败(并停止)。

  

默认情况下,Gradle将在任何任务失败后中止执行并使构建失败。这样可以更快地完成构建,但会隐藏其他可能发生的故障。为了在单个构建执行中发现尽可能多的故障,您可以使用--continue选项。

答案 1 :(得分:0)

使用--continue Gradle将继续执行已成功执行任务依赖关系的所有任务。但是,它不会执行依赖项失败的任务,如果在构建期间任何任务失败,整体构建将失败。

这可用于在测试失败后继续构建,但阻止将任何内容发布到Maven存储库。但是,仅为发布任务设置相应的依赖项是不够的,因为为每个发布目标生成了一个人工任务。所有这些任务都需要正确设置其依赖关系,以便只有在没有测试失败时才执行它们。这可以在多项目构建中实现,如以下示例所示,该示例显示了在发布任何内容之前必须运行的一些可能的依赖项:

publish {
    // 'javaProjects' is a set of all Java projects, you may want to use 'allprojects' here
    dependsOn javaProjects.collect { jp -> jp.tasks.build }
    // 'tagVersion' is a task which creates and pushes Git tags in _all_ projects
    dependsOn rootProject.tasks.tagVersion
    // The following line may not be needed for other projects
    dependsOn rootProject.tasks.sonarRunner
}
// now, the same dependencies are set for the created publication tasks
afterEvaluate {
    tasks.withType(PublishToMavenRepository).all { publishTask ->
        publishTask.dependsOn javaProjects.collect { jp -> jp.tasks.build }
        publishTask.dependsOn rootProject.tasks.tagVersion
        publishTask.dependsOn rootProject.tasks.sonarRunner
    }
}