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插件版本