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

Posted

技术标签:

【中文标题】Gradle:是不是可以在 gradle 插件中定义 CustomTask 并从 build.gradle 中扩展该类?【英文标题】:Gradle: Is it possible to define a CustomTask in a gradle plugin and extend that class from within the build.gradle?Gradle:是否可以在 gradle 插件中定义 CustomTask 并从 build.gradle 中扩展该类? 【发布时间】:2021-02-18 02:15:13 【问题描述】:

我正在实现一个用 Java 编写的自定义 gradle 插件。

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

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

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

我遇到的问题是如何从实施 build.gradle 中支持自定义任务定义?最初我试图从 build.gradle 内部扩展我的 CustomBaseTask,但我似乎对此没有可见性,只有 ootb 类(Exec、DefaultTask 等)。

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

【问题讨论】:

关于在 Gradle 脚本中扩展基类的问题:是的,有可能。如果不行,你还记得先导入类吗? 【参考方案1】:

是否可以在插件中定义 CustomTask 并从 build.gradle 扩展它

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

我遇到的问题是如何从实现的 build.gradle 中支持自定义任务定义?最初我试图从 build.gradle 内部扩展我的 CustomBaseTask,但我似乎对此没有可见性,只有 ootb 类(Exec、DefaultTask 等)。 从 build.gradle 定义自定义任务并将预定义属性从我的 gradle 插件传递给它的最佳方法是什么?

您可以像这样制作自定义任务:

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 

【讨论】:

以上是关于Gradle:是不是可以在 gradle 插件中定义 CustomTask 并从 build.gradle 中扩展该类?的主要内容,如果未能解决你的问题,请参考以下文章

Gradle:是不是可以发布到 Gradle 自己的本地缓存?

如何让 Teamcity Artifactory 插件在 Gradle 中调用 bootJar 而不是 Jar?

如何在android studio中查看当前使用的gradle版本和gradle插件版本

如何在android studio中查看当前使用的gradle版本和gradle插件版本

如何在android studio中查看当前使用的gradle版本和gradle插件版本

如何在android studio中查看当前使用的gradle版本和gradle插件版本