gpt4 book ai didi

gradle - 使用扩展中的参数配置自定义插件

转载 作者:行者123 更新时间:2023-12-03 03:24:32 26 4
gpt4 key购买 nike

嗨,我正在尝试根据插件扩展值动态创建和配置任务,问题似乎是评估顺序,是否有任何解决方法?

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com