独立的gradle插件可以导出自定义任务类型吗



我有一个独立的Gradle插件,其中包括一个自定义任务类型:

gradle约定/build.gradle

plugins {
id 'groovy-gradle-plugin'
id 'maven-publish'
}
group = 'com.example'
version = '1.0'
publishing {
repositories {
maven {
url = uri('/path/to/repo')
}
}
}

gradle conventions/src/main/groovy/com.example.my conventions.gradle

abstract class CustomTask extends DefaultTask {
@TaskAction
def hello() {
println "hello"
}
}

我可以使用另一个项目的插件,但如何注册CustomTask?类似这样的东西:

项目/构建.gradle

plugins {                                                                       
id 'com.example.my-conventions' version '1.0'
}
// how do I reference CustomTask here?
tasks.register('myCustomTask', com.example.CustomTask) {
// ...
}

是否可以从自定义插件导出自定义任务?还是必须使用buildscript机制使用自定义任务?

检查了gradle-conventions-1.0.jar后,似乎自定义任务类属于默认包,所以我可以按如下方式注册任务:

项目/构建.gradle

plugins {                                                                       
id 'com.example.my-conventions' version '1.0'
}
tasks.register('myCustomTask', CustomTask) {
// ...
}

但这只适用于com.example.my-conventions.gradle除了类本身之外还包含groovy代码,否则我会得到错误:

An exception occurred applying plugin request [id: 'com.example.my-conventions', version: '1.0']
> Failed to apply plugin 'com.example.my-conventions'.
> java.lang.ClassNotFoundException: precompiled_ComExampleMyConventions

这种方法避免了依赖buildscript机制(Gradle文档中不建议使用该机制(。

最新更新