如何在gradle多模块项目中创建可重用的任务?



我有一个多模块gradle项目,似乎我需要一些共同的任务,或者一个根任务,可以在每个子项目上运行不同的参数。我的项目结构是:

-+ parent
|  /gradle
|  build.gradle.kts
|  settings.gradle.kts
|  gradlew
|  gradlew.bat
+- child1
|    /build
|    build.gradle.kts
+- child2
|    /build
|    build.gradle.kts
+- child3
|    /build
|    build.gradle.kts
+- child4
|    /build
|    build.gradle.kts

我只需要在child2,child3child4项目上运行jacoco测试覆盖率任务,具有单个最小值.

所以我不能在根build.gradle.ktssubprojects部分定义任务,因为它将应用于所有子项目。

作为另一种选择,似乎我可以在根build.gradle.kts中定义一个任务,并将其称为dependsOn(":parent:myTask"),但在这种情况下,我不能使用参数化…

我不是很熟悉这个,所以谁能解释一下正确的方式应该这样做,或者指出一个很好的例子类似的功能?

我相信有很多方法可以做到这一点,但是像这样的事情怎么样?任务可以驻留在根build.gradle中,您可以解析项目名称并具体定义您的值(您也可以跳过不想在其中执行任务的子项目)。例如…

tasks.register("jill") {
doLast {
println("Jill was here")
}
}
allprojects {
gradle.projectsEvaluated {
var value = 0
if (project.name == "child1") value = 45
if (project.name == "child2") value = 73
if (project.name == "child3") value = 61
if (project.name == "child4") value = 38
tasks.register("jones") {
doLast {
println("PROJECT [$value]: ${project.name}")
}
}
tasks.findByPath(":jill").finalizedBy(project.tasks.findByName("jones"))
}
}

马上解释解决方案…循环遍历所有项目,根据项目名称设置value。然后,在每个子项目中注册一个任务,它将做一些事情(mine打印项目名称和计算值)。

然后,正如您提到的,它将所有这些新任务(jones)连接到根项目(jill)中的一个任务。

最后,您可以简单地运行./gradlew jill。它运行主任务,并通过在子项目中创建的所有任务来完成它,每个子项目都有自己的值。

> Task :jill
Jill was here
> Task :child4:jones
PROJECT [38]: child4
> Task :child3:jones
PROJECT [61]: child3
> Task :child2:jones
PROJECT [73]: child2

> Task :child1:jones
PROJECT [45]: child1

相关内容

  • 没有找到相关文章

最新更新