我的根项目我定义了一个变量和一个使用它的方法,如
// An immediately executed closure (I hope)
def myvar = ({-> do something})()
def myfun() {
println myvar + ":" + project
}
并在子项目中调用它。这会导致错误,如
无法在根项目'root'上找到属性'myvar'。
我觉得奇怪,因为myvar
在函数定义的范围内(所以我可能做了不同的事情?)。 Ii看起来像动态范围,但我不敢相信。
我知道project.ext
,但我不想在其他地方提供myvar
。
所以我把定义移到了声明中(它现在被多次评估,但是谁在乎),但后来我发现project
指的是根项目,而不是调用函数的子项目(词法)作用域)。我可以在没有明确传递的情况下获取当前项目吗?
答案 0 :(得分:0)
在脚本最外层声明的局部变量不在同一脚本的方法范围内。这是由于Groovy如何将脚本转换为可运行的类。解决此问题的一种方法是使用ext.myfun = { ... }
来解决范围问题并且不会影响调用网站(仍然可以使用myfun()
)。
您的其他问题似乎无关紧要。 project
指的是脚本与之关联的项目,并且不是基于调用者确定的。如果不传递调用者的项目是不可能的。但是,可以为每个项目声明ext.myfun
,例如在根脚本的allprojects {}
块中。