如何指定由Gradle SonarQube插件运行的测试任务

7

我正在使用带有SonarQube插件的Gradle,并通过以下方式触发它:

gradle sonarqube

然而,它调用了内置的 "test" 任务,该任务运行包括目前并非全部通过的集成测试在内的所有测试。我希望能够指定 sonarqube 任务使用类似于 "unitTest" 任务而不是运行所有内容的 "test" 任务。

团队中的其他人在 IDE 中运行 cucumber 测试,也使用 test 任务,因此当前当我在主要的 "test" 任务中排除 cucumber 测试时,他们必须取消该排除,以便启动他们的 cucumber 测试,这样并不理想。

我使用以下语法包含 sonarqube:

plugins {
    id "org.sonarqube" version "2.5"
}

我该如何使SonarQube任务使用另一个测试任务?

更新:

使用以下代码解决了问题,先让子项目运行它们的单元测试以生成所需的测试报告数据,然后再运行SonarQube任务。

// Removes the dependency on main test task and runs unitTests for test code coverage statistics
tasks['sonarqube'].with {
    dependsOn.clear()
    subprojects.each { dependsOn("${it.name}:unitTests") }
}

dependsOn.clear()清除所有依赖关系,因此如果有多个,我可能需要执行类似以下操作:

taskName.enabled=false

除非有更简单的方法,否则在任务完成后重新启用它?我尝试了dependsOn.remove("test")但没有效果。

1个回答

10

根据文档sonarqube任务默认仅依赖于test任务:

如果应用了Java插件,该插件将在sonarqube上添加从test的任务依赖项以满足这些需求。

您可以轻松地删除此任务依赖项并添加自己的依赖项:

task unitTest {
    doLast {
        println "I'm a unit test"
    }
}

tasks['sonarqube'].with {
    dependsOn.clear()
    dependsOn unitTest
}

现在,只有unitTest任务(以及其依赖项)将在执行sonarqube任务时被执行。请注意,dependsOn只是依赖项条目的列表。您可以以许多不同的方式修改它。


非常感谢您的回答,您在更改我更新的问题中提到的个别依赖项时有什么首选方法? - Andrew Chen
我不明白为什么默认情况下,sonarqube任务依赖于test任务会导致运行所有类型为Test的任务。 - jordanpg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接