在所有子项目中的所有测试之前先在子项目中运行checkstyles

时间:2019-09-05 10:17:38

标签: java gradle checkstyle subproject

我有gradle项目和4个子项目。我当前具有checkstyle的root gradle.build:

allprojects {
  apply plugin: "checkstyle"
  checkstyle {
  ...
  }
}

所以当我在主文件夹中运行./gradlew build时,我得到下一个: 第一个子项目的checkstyle,然后进行测试。然后,它为第二个子项目运行checkstyle,然后为第二个项目进行测试,等等。

问题是:如果我在第一个子项目中进行了长时间的测试,则可以等待很多时间,然后发现我在第四个项目中有2个空格,因此checkstyle失败,但是我等待了很多时间

我真正想要的是: 对所有子项目运行所有检查(checkstyle,我也有pmd),然后在所有子项目中运行所有测试。这将为团队中的每个人节省大量时间。

除了建立两个不同的管道并分别运行它们之外,我可以这样做吗?例如:./gradlew allMyCheckstyles && ./gradlew构建。 我想只使用./gradlew构建 谢谢!

我尝试了很多dependsOn,runAfter,但没有成功。

1 个答案:

答案 0 :(得分:2)

抱歉,此答案的先前版本误解了此问题的要求。

这是一种应该执行您想要的操作的解决方案:


// Create a lifecycle task in the root project.
// We'll make this depend on all checkstyle tasks from subprojects (see below)
def checkstyleAllTask = task("checkstyleAll")

// Make 'check' task depend on our new lifecycle task
check.dependsOn(checkstyleAllTask)

allProjects {

    // Ensure all checkstyle tasks are a dependency of the "checkstyleAll" task
    checkstyleAllTask.dependsOn(tasks.withType(Checkstyle))

    tasks.withType(Test) {

        // Indicate that testing tasks should run after the "checkstyleAll" task
        shouldRunAfter(checkstyleAllTask)

        // Indicate that testing tasks should run after any checksytle tasks.
        // This is useful for when you only want to run an individual
        // subproject's checks (e.g. ./gradlew ::subprojA::check)
        shouldRunAfter(tasks.withType(Checkstyle))
    }
}

文档herehere