Gradle自定义插件:如何使用预期在构建脚本中设置的属性配置Gradle任务
我正在尝试编写一个定制的Gradle插件,我需要使用构建脚本(build.Gradle)提供的属性值在我的项目上配置一个“Zip”任务 下面是我的build.gradle脚本的相关部分:Gradle自定义插件:如何使用预期在构建脚本中设置的属性配置Gradle任务,gradle,build.gradle,gradle-plugin,Gradle,Build.gradle,Gradle Plugin,我正在尝试编写一个定制的Gradle插件,我需要使用构建脚本(build.Gradle)提供的属性值在我的项目上配置一个“Zip”任务 下面是我的build.gradle脚本的相关部分: oozie { sourceSets { workflow { dslDir = 'workflow/dsl' dslCopySpec = { rename { it - ~/\.[^\.]+$/ + '.xml' } filter(Oozie
oozie {
sourceSets {
workflow {
dslDir = 'workflow/dsl'
dslCopySpec = {
rename { it - ~/\.[^\.]+$/ + '.xml' }
filter(OozieDslFilter)
}
resourceDir = 'workflow/resources'
resourceCopySpec = {}
}
coordinator {
dslDir = 'coordinator/dsl'
dslCopySpec = {
rename { it - ~/\.[^\.]+$/ + '.xml' }
filter(OozieDslFilter)
}
resourceDir = 'coordinator/resources'
resourceCopySpec = {}
}
}
}
下面是我的插件代码,它目前没有达到我的预期:
class Oozie implements Plugin<Project> {
@Override
void apply(Project project) {
project.configurations {
oozieLibs {
description = /Java libraries (jars) to be downloaded and included in the workflow 'lib' directory/
transitive = true
}
}
project.extensions.create('oozie',
OozieExtension,
project.container(OozieSourceSet)
)
project.task('build', type: Zip) {
group = 'Oozie Workflow Build'
with {
archiveName = "${project.name}-${project.version}.${extension}"
destinationDir = project.buildDir
}
from(project.configurations.oozieLibs) {
into 'lib'
}
// project.oozie.sourceSets is empty at this time for obvious reasons.
println project.oozie.sourceSets
project.oozie.sourceSets.each { OozieSourceSet sourceSet ->
println sourceSet
from(sourceSet.dslDir, sourceSet.dslCopySpec)
from(sourceSet.resourceDir, sourceSet.resourceCopySpec)
}
}
project.task('clean', type: Delete) {
group = 'Oozie Workflow Build'
delete project.buildDir
}
}
}
class Oozie实现插件{
@凌驾
无效申请(项目){
project.configurations{
oozieLibs{
description=/Java库(jar)要下载并包含在工作流“lib”目录中/
可传递=真
}
}
project.extensions.create('oozie',
Oozie扩展,
project.container(OozieSourceSet)
)
任务('build',类型:Zip){
组='Oozie工作流生成'
与{
archiveName=“${project.name}-${project.version}.${extension}”
destinationDir=project.buildDir
}
来自(project.configurations.oozieLibs){
进入“自由”
}
//由于明显的原因,project.oozie.sourceset此时为空。
println project.oozie.sourceset
project.oozie.sourceSet.each{OozieSourceSet sourceSet->
println源集
from(sourceSet.dslDir,sourceSet.dslCopySpec)
from(sourceSet.resourceDir,sourceSet.resourceCopySpec)
}
}
项目任务('clean',类型:Delete){
组='Oozie工作流生成'
删除project.buildDir
}
}
}
我希望能够在插件的“apply”方法中读取project.oozie.sourceset等属性的值
但是,在调用我的自定义插件的“apply”方法时,project.oozie.sourceset的值为空,因为为该属性设置值的build.gradle脚本尚未执行
我如何处理这个问题
谢谢 我采用的解决方案是:
class Oozie implements Plugin<Project> {
static final String DEFAULT_FILE_EXTENSION_FINDER_REGEX = /\.[^\.]+$/
static final String DEFAULT_EXTENSION_REPLACEMENT = '.xml'
final static DEFAULT_WORKFLOW_ROOT = 'workflow'
final static DEFAULT_COORDINATOR_ROOT = 'coordinator'
final static DEFAULT_DSL_DIR = 'dsl'
final static DEFAULT_RESOURCE_DIR = 'resources'
@Override
void apply(Project project) {
project.configurations {
oozieLibs {
description = /Java libraries (jars) to be downloaded and included in the workflow 'lib' directory/
transitive = true
}
}
project.extensions.create('oozie',
OozieExtension,
project.container(OozieSourceSet)
)
project.oozie.sourceSets {
workflow {
dslCopySpec = {
from("${DEFAULT_WORKFLOW_ROOT}/${DEFAULT_DSL_DIR}") {
rename { it - ~DEFAULT_FILE_EXTENSION_FINDER_REGEX + DEFAULT_EXTENSION_REPLACEMENT }
filter(OozieWorkflowDslFilter)
}
}
resourceCopySpec = {
from("${DEFAULT_WORKFLOW_ROOT}/${DEFAULT_RESOURCE_DIR}")
}
}
coordinator {
dslCopySpec = {
from("${DEFAULT_COORDINATOR_ROOT}/${DEFAULT_DSL_DIR}") {
rename { it - ~DEFAULT_FILE_EXTENSION_FINDER_REGEX + DEFAULT_EXTENSION_REPLACEMENT }
filter(OozieWorkflowDslFilter)
}
}
resourceCopySpec = {
from("${DEFAULT_COORDINATOR_ROOT}/${DEFAULT_RESOURCE_DIR}")
}
}
}
project.task('build', type: Zip) {
group = 'Oozie Workflow Build'
with {
archiveName = "${project.name}-${project.version}.${extension}"
destinationDir = project.buildDir
}
}
project.task('clean', type: Delete) {
group = 'Oozie Workflow Build'
delete project.buildDir
}
project.afterEvaluate {
project.build.with {
from(project.configurations.oozieLibs) {
into 'lib'
}
}
project.oozie.sourceSets.each { OozieSourceSet sourceSet ->
project.build.with(sourceSet.dslCopySpec)
project.build.with(sourceSet.resourceCopySpec)
}
}
}
}
class Oozie实现插件{
静态最终字符串默认\u文件\u扩展名\u查找器\u正则表达式=/\.[^\.]+$/
静态最终字符串默认扩展名替换='.xml'
最终静态默认\u工作流\u根='工作流'
最终静态默认\u协调器\u根='COORDINATOR'
最终静态默认值\u DSL\u DIR='DSL'
最终静态默认资源目录='resources'
@凌驾
无效申请(项目){
project.configurations{
oozieLibs{
description=/Java库(jar)要下载并包含在工作流“lib”目录中/
可传递=真
}
}
project.extensions.create('oozie',
Oozie扩展,
project.container(OozieSourceSet)
)
project.oozie.sourceset{
工作流程{
dslCopySpec={
来自(${DEFAULT\u WORKFLOW\u ROOT}/${DEFAULT\u DSL\u DIR}){
重命名{it-~DEFAULT_FILE_EXTENSION_FINDER_REGEX+DEFAULT_EXTENSION_REPLACEMENT}
过滤器(OozieWorkflowDSLPILTER)
}
}
resourceCopySpec={
来自(${DEFAULT\u工作流\u根目录}/${DEFAULT\u资源\u目录})
}
}
协调人{
dslCopySpec={
从(${DEFAULT\u COORDINATOR\u ROOT}/${DEFAULT\u DSL\u DIR})开始){
重命名{it-~DEFAULT_FILE_EXTENSION_FINDER_REGEX+DEFAULT_EXTENSION_REPLACEMENT}
过滤器(OozieWorkflowDSLPILTER)
}
}
resourceCopySpec={
来自(${DEFAULT\u协调器\u根目录}/${DEFAULT\u资源\u目录})
}
}
}
任务('build',类型:Zip){
组='Oozie工作流生成'
与{
archiveName=“${project.name}-${project.version}.${extension}”
destinationDir=project.buildDir
}
}
项目任务('clean',类型:Delete){
组='Oozie工作流生成'
删除project.buildDir
}
项目后评估{
project.build.with{
来自(project.configurations.oozieLibs){
进入“自由”
}
}
project.oozie.sourceSet.each{OozieSourceSet sourceSet->
project.build.with(sourceSet.dslCopySpec)
project.build.with(sourceSet.resourceCopySpec)
}
}
}
}
如果你能更明确地描述什么对你不起作用,那会很有帮助。谢谢@EricWendelin我用一些解释更新了这个问题。如果您认为需要更多信息,请告诉我。