嗨,我正在尝试根据插件扩展值动态创建和配置任务,问题似乎是评估顺序,是否有任何解决方法?
apply plugin: SetupPlugin
setup {
destDir = 'some directory set per project in build.gradle'
sourceFile = 'some file set per project in build.gradle'
}
class PluginExtension {
String destDir
String sourceFile
}
class SetupPlugin implements Plugin<Project> {
def placeholders
void apply(Project project) {
project.extensions.create("setup", PluginExtension)
project.task ("setupEnvironment", type: Copy) {
doFirst() {
//computes placeholders <-- project.setup has value here
}
into (project.setup.destDir){ //<-- project.setup is null
from project.setup.sourceFile
}
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: placeholders)
}
}
}
最佳答案
将其移入doFirst块可能会产生一些副作用,因为随着执行时间(而不是配置时间)重新配置复制任务的参数,最新的gradle任务可能会遇到问题。一个可以解决问题的方法是使用闭包延迟评估:
...
void apply(Project project) {
project.extensions.create("setup", PluginExtension)
project.task ("setupEnvironment", type: Copy) {
doFirst() {
//computes placeholders <-- project.setup has value here
}
into {project.setup.destDir}
from { project.setup.sourceFile }
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: placeholders)
}
}
...
希望对您有所帮助!
干杯,
雷内
关于gradle - 使用扩展中的参数配置自定义插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15822825/