Gradle:是否可以在 gradle 插件中定义 CustomTask 并从 build.gradle 中扩展 class?

Gradle: Is it possible to define a CustomTask in a gradle plugin and extend that class from within the build.gradle?

我正在实施自定义 gradle 插件,用 Java 编写。

我的自定义 gradle 插件有一个准备 yml 文件的任务。 yml 文件中包含各种块; gradle 任务名称和该任务的一些参数。

我的想法是,我的自定义 gradle 插件将提供一些任务(所有任务都扩展了一些具有预定义属性的通用基础)。然后,如果我的用户想从他们的 build.gradle 中定义一些新的自定义任务,他们可以在 build.gradle 中包含任务并在 yml 文件中引用。

到目前为止,这对于从插件内部定义的任务非常有效,我可以从 yml 文件中读取 gradle 任务,从 args 设置它们的属性并执行它们的操作。

我遇到的问题是弄清楚如何从实现 build.gradle 中支持自定义任务定义?最初,我试图从 build.gradle 内部扩展我的 CustomBaseTask,但我似乎看不到这一点,只有 ootb 类(Exec、DefaultTask 等)。

从 build.gradle 定义自定义任务并将预定义属性从我的 gradle 插件传递给它的最佳方法是什么?

Is it possible to define a CustomTask in a plugin & extend it from build.gradle

是的,绝对有可能。正如@Bjorn Vester 所说:确保您首先导入了 class。

Issue I'm having is figuring out how to support custom task definitions from the implementing build.gradle? Initially I was trying to extend my CustomBaseTask from inside the build.gradle but I dont seem to have visibility to this, just the ootb classes (Exec, DefaultTask etc..). What would be the best approach for defining a custom task from build.gradle and passing predefined properties to it from my gradle plugin?

您可以像这样创建自定义任务:

public class SomeTask extends DefaultTask {

     // your predefined attributes          

   @TaskAction
   public void doAction() {
       // do some stuff      
   }
}

然后在 build.gradle 文件中你可以扩展你的逻辑:

tasks.withType(SomeTask::class.java).configureEach {
    // doLast,doFirst...etc. Extend your predefined logic 
}