java - 如何在所有子项目中调用Gradle任务?

标签 java gradle

假设,我有一个 Gradle 项目层次结构,其中一些应用了 java 插件:

root
  projA
    projA1
    projA2 (java)
  projB
    projB1 (java)
    projB2 
      projB21 (java)
      projB22 (java) 
  projC (java)

我想在存在此任务的所有子项目中执行 test 任务::projA:projA2:test:projB:projB1:test:projC:test。也许我将来会添加更多项目,并且我不想手动支持所有子项目中的所有测试任务的列表。我怎样才能实现它?

我想到的一件事如下:

// In root I iterate over all subprojects and find the task by name causing
// its creation and configuration

tasks.register("testAll") {
  dependsOn subprojects.findResults { it.tasks.findByName("test") }
}

我不喜欢这种方法,因为它违背 task configuration avoidance风格。

另一个选项是迭代子项目并检查其中是否应用了 java 插件:

// In root

tasks.register("testAll") {
  dependsOn subprojects.findAll { it.plugins.hasPlugin("java") }.collect { it.tasks.named("test") }
}

它有效,但我有一个填充物,我想念一些更简单的东西......

编辑 1:抱歉,但我忘记了一个重要的细节 - 我需要在项目的子树中运行测试。比如说,路径 :projB 下的所有内容。

最佳答案

除非我遗漏了什么,否则您希望为所有子模块运行测试。

你可以......这样做。

./gradlew 干净测试

这将在所有已充分配置的子项目中运行测试任务。

如果您需要在特定子项目中运行任务,从根项目您可以指定要运行任务的子项目。

./gradlew clean :projB:test

如果您的子项目有一个任务需要在测试后运行,那么您可以在 subprojects block 中执行此操作。

subprojects {
    myTask.dependsOn("test")
}

关于java - 如何在所有子项目中调用Gradle任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61131660/

相关文章:

Android gradle 将文件拉取到 Assets

dependencies - Gradle 多项目可选子项目的传递依赖应解析为现有子项目

java - 为什么有时 Eclipse 在导入工作区时不需要 .project 和 .classpath 文件/Eclipse 如何将项目识别为项目?

java - ViewPager 的子项

java - 主程序在读取启动另一个永远运行的进程的进程的输出流时挂起

gradle - 如何让Gradle任务依赖于另一个任务,但如果另一个任务执行则不重新执行?

gradle - Gradle中是否可以通过命令行获取属性的属性

gradle - 将工件从Gradle项目发布到Bintray(Maven存储库)

java - JOGL 有问题( eclipse )

java - 无法使用 Selenium 和 Java 在 Mac OSX 中启动 Safari 12 浏览器