【问题标题】:How to specify test task run by Gradle SonarQube plugin如何指定 Gradle SonarQube 插件运行的测试任务
【发布时间】:2017-12-31 23:40:45
【问题描述】:

我正在使用 Gradle 和 sonarqube 插件并使用

触发它
gradle sonarqube

但是,它正在调用内置的“测试”任务,该任务运行所有类型的测试,包括目前尚未全部通过的集成测试。我希望能够指定 sonarqube 任务使用类似“unitTest”任务的东西,而不是运行所有内容的“test”任务。

团队中的其他人在 IDE 中运行黄瓜测试,该 IDE 也使用测试任务,所以目前当我在主要“测试”任务中排除黄瓜测试时,他们必须评论排除的内容,以便他们的黄瓜测试被踢掉,这并不理想。

我使用以下语法包含 sonarqube:

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

如何让 sonarqube 任务使用另一个测试任务?

更新:

让它与下面的代码一起工作,让子项目首先运行他们的 unitTests 以生成所需的测试报告数据,然后运行 ​​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") 但没有奏效。

【问题讨论】:

    标签: gradle sonarqube


    【解决方案1】:

    sonarqube 任务默认依赖于test 任务,根据the docs:

    为了满足这些需求,如果应用了 java 插件,插件会添加来自 sonarqube 的任务依赖项。

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

    task unitTest {
        doLast {
            println "I'm a unit test"
        }
    }
    
    tasks['sonarqube'].with {
        dependsOn.clear()
        dependsOn unitTest
    }
    

    现在,每当您执行 sonarqube 任务时,只会执行 unitTest 任务(及其依赖项)。请注意,dependsOn 只是一个依赖项列表。您可以通过多种不同方式对其进行修改。

    【讨论】:

    • 非常感谢您的回答,如我更新的问题中所述,您更改单个依赖项的首选方式是什么?
    • 我不明白为什么 sonarqube 任务默认依赖于 test 任务会导致所有 Test 类型的任务都在运行。
    猜你喜欢
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 2020-06-11
    相关资源
    最近更新 更多