如何以编程方式获取Gradle目标任务?

e7arh2l6  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(99)

Gradle根据您想要执行的任务构建任务图。
根据我想运行的任务(即jacocoTestReport或测试),我想应用一个插件(jacoco)。
但是,我不清楚如何才能获得实际的目标任务。
假设我运行这个命令:
$ gradle test

$ gradle jacocoTestReport
build.gradle.kts文件中,我有这样的东西:

if("jacocoTestReport" in gradle.targets){
  apply<JacocoPlugin>()
  tasks.named<JacocoReport>("jacocoTestReport") {
        dependsOn("test")
        reports {
            xml.required.set(true)
        }
    }
}

这意味着,插件仅在目标是jacocoTestReport时应用。
为什么?因为jacoco java代理会使测试变慢,而且我并不总是需要它。

fkaflof6

fkaflof61#

您可以使用Gradke.getStartParameter API查询要执行的任务,并做出相应的React。
下面是一个简单的例子,仅在请求jacocoTestReport任务时应用jacoco插件。

val taskRequests = gradle.startParameter.taskRequests
if (taskRequests.isNotEmpty() && taskRequests[0].args.contains("jacocoTestReport")) {
    project.apply<JacocoPlugin>()
    // create tasks dependencies
    val jacocoTask = tasks.getByPath("jacocoTestReport")
    tasks.test.configure {
        finalizedBy(jacocoTask)
    }
    jacocoTask.dependsOn(tasks.test)
}

相关问题