gradle - 如何确定是否已实例化Gradle任务(配置避免API)

标签 gradle configuration task instantiation

我正在尝试提高Gradle构建的性能,并发现了Gradle Task Configuration避免API(https://docs.gradle.org/current/userguide/task_configuration_avoidance.html)。除非确实需要,否则它可以推迟任务的创建和配置。这可以节省大量的启动时间,并且由于我们在构建期间多次调用Gradle,因此可以节省大量时间。

我们开发了一些供内部使用的插件,我努力改变了定义任务的方式,以避免在不需要时创建任务。我想测试我的更改是否成功并且任务实例化是否延迟。

如何创建任务而不实例化的简单示例:

class MyTask extends DefaultTask {
}

TaskProvider customTask = tasks.register("customAction", MyTask) {
    println "task configured!"  // configuration time output
    doLast {
        println "action 1!"    // execution time output
    }
}

// configuration like this avoids task instantiation
tasks.named("customAction") {
    doLast {
        println "action 2!"
    }
}

tasks.withType(MyTask).configureEach {
    doLast {
        println "action 3!"
    }
}

执行gradle help不会打印“已配置任务!”消息,而gradle customAction可以。

为了确保我不会意外触发任务实例化,我想为我们的插件编写测试。但是我找不到确定任务是否实例化的方法。

我了解Build Scans(https://guides.gradle.org/creating-build-scans/),但是我们的公司准则很严格,并且尚待清除,因此我暂时不能使用它。另外,我看不到在测试中使用它的方法。

有没有办法
  • 从Gradle项目中获取已创建/实例化任务的列表?
  • 还是Task或TaskProvider上是否有任何属性显示任务是否已创建/实例化?
  • 还是可以以某种方式离线使用buildscans?

  • 如果可以在插件的测试代码中使用该解决方案,那将很酷,但是手动评估也将很有值(value)。

    最佳答案

    configureEach仅在创建任务时调用。您可以编写这样的内容以获取所有已配置任务的列表

    def tasks = []
    project.allprojects { Project sp ->
        sp.tasks.configureEach { Task t ->
            tasks,add(t.path)
        }
    }
    project.gradle.buildFinished {
        println tasks
    }
    

    关于gradle - 如何确定是否已实例化Gradle任务(配置避免API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54575614/

    相关文章:

    java - Gradle 构建在 :compileJava: `No matching variant` 处失败

    jenkins - 如何在Nexus中宣传非Maven工件?

    c# - 任务与障碍

    WPF 异步 Task<T> 阻塞 UI

    spring-boot - Spring Boot : apply @Configuration to certain package only

    java - 生产者-消费者线程死锁

    java - 在 GitHub 上发布和拉取 Android Studio Gradle 项目的正确方法是什么?

    gradle - 为什么liberty-gradle-plugin在CompileJSP上失败?

    c# - ConfigurationSection 多个枚举值

    java - Eclipse JDK 8 配置