假设,我有一个 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/