显然我不明白这里发生了什么.
我猜prop2和prop3无法访问,因为它们是变量而不是"项目属性".
问题出现了,因为我希望变量prop2和prop3在"doTheThing()"方法中可见,但我不想将它们传入.我希望变量可以全局访问任务,方法和类(但只在构建脚本本身内部) - 我希望它们被输入(这就是为什么不能接受prop1的定义).
但实际上 - 我想我要求的是帮助理解Gradle项目属性是什么以及语法'prop1 ="blah"'实际上在做什么.
我已经阅读了Gradle用户指南以及Gradle in Action - 如果他们已经解释了这个概念,请指出我正确的部分(也许我当时没有理解它是什么意思,所以我掩饰了它).
prop1 = "blah"
String prop2 = "bleah"
def prop3 = "blargh"
task testPropAccess << {
println "1: $prop1"
println "2: $prop2"
println "3: $prop3"
doTheThing()
}
private void doTheThing(){
println "4: $prop1"
println "5: $prop2" // error: Could not find property 'prop2' on root project 'script'
println "6: $prop3" // error: Could not find property 'prop3' on root project 'script'
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*ser 19
当您在最外层声明一个变量时(如在第二个和第三个语句中),它将成为脚本run方法的局部变量.这实际上只是Groovy行为,Gradle可以轻易改变.
如果您想要等效的全局变量,只需为未绑定的变量赋值(如第一个语句中所示).这为Gradle的Project对象添加了一个动态属性,该对象在整个构建脚本中可见(除非被遮挡).换句话说,prop1 = "blah"相当于project.prop1 = "blah".
如果你想要一个类型化的全局变量,你将不得不等到Gradle升级到Groovy 1.8,这使得@Field注释成为可能.或者你编写了一个插件,将一个约定对象混合到Project对象中(但这不适合于临时脚本).
| 归档时间: |
|
| 查看次数: |
25052 次 |
| 最近记录: |