我正在尝试编写一个自定义 Gradle 插件,我需要使用我希望构建脚本 (build.gradle) 提供的属性在我的项目上配置一个“Zip”任务。
这是我的 build.gradle 脚本的相关部分:
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
}
}
}
我希望能够在我的插件的“应用”方法中读取 project.oozie.sourceSets 等属性的值。
但是,在调用我的自定义插件的“应用”方法时,project.oozie.sourceSets 的值为空,因为尚未执行设置该属性值的 build.gradle 脚本。
我该如何解决这个问题?
谢谢!