gpt4 book ai didi

plugins - gradle 从扩展中获取值(作为输入传递给任务)

转载 作者:行者123 更新时间:2023-12-02 17:47:25 25 4
gpt4 key购买 nike

我的插件中有以下代码:

    @Override
void apply(Project project) {

project.extensions.create(EXTENSION,TestExtension)

project.task("task1") << {
println "Task 1"
println(project.mmm.test)
def extension = project.extensions.findByName(EXTENSION)
println(extension.test)
}

project.task("task2",type: TestTask) {
println "Task 2 "
def extension = project.extensions.findByName(EXTENSION)
// conventionMapping.test = {extension.test}
// println(project.extensions.findByName(EXTENSION).test)
// test = "test"

}
}

在任务 1 中,extension.test 返回正确的值。然而在task2中extension.test总是返回null。我做错了什么?有没有更好的方法来传递一些扩展值作为任务的输入?我在 Mac 上使用 gradle 1.12 和 jdk 1.8。最好的问候

编辑:正确版本:

   project.task("task2", type: TestTask) {
project.afterEvaluate {
def extension = project.extensions.findByName(EXTENSION)
println(project.extensions.findByName(EXTENSION).test)
test = project.extensions.findByName(EXTENSION).test
}
}

最佳答案

task1打印执行时的值(注意 << ), task2在配置时(在评估apply plugin: ...之后构建脚本的其余部分之前)。这解释了为什么 println for task1 按预期工作,并且 println对于任务2则不然。

但是,在执行时配置任务已经太晚了。相反,插件需要推迟读取用户提供的值,直到配置阶段结束(在评估构建脚本之后,但在执行任何任务之前)。有几种技术可以做到这一点。更简单的方法之一是将任何此类读取访问包装为 project.afterEvaluate { ... } .

关于plugins - gradle 从扩展中获取值(作为输入传递给任务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23962154/

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