繁体   English   中英

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

[英]How to call a Gradle task in all subprojects?

说,我有一个 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") }
}

我不喜欢这种方法,因为它违背了任务配置回避风格。

另一种选择是遍历子项目并检查java插件是否应用在那里:

// In root

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

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

编辑 1 :抱歉,但我忘记了一个重要细节 - 我需要在项目的子树中运行测试。 说,一切都在路上:projB

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

你可以……这样做。

./gradlew clean test

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

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

./gradlew clean:projB:test

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

subprojects {
    myTask.dependsOn("test")
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM