作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的插件中有以下代码:
@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/
我是一名优秀的程序员,十分优秀!