我有根项目和子项目(:child)。根构建如下所示:
def foo = {
println("foo")
}
allprojects {
task bar << {
println(project.name + ":bar")
}
afterEvaluate {
foo()
}
}运行gradle bar打印:
foo
foo
:bar
:child:bar
child:bar
parent:bar这是有道理的。但是,IRL我需要由子构建文件调用foo (因为我希望它只被一些子模块调用)。文档似乎足够清晰了:In a multi-project build, sub-projects inherit the properties and methods of their parent project
但是,将上面的"afterEvaluate“块移动到child/build.gradle中会导致一个错误:Could not find method foo() for arguments [] on project ':child' of type org.gradle.api.Project。
为什么会发生这种事,我该怎么解决呢?我尝试了很多不同的变体--移动def ( buildscript,allprojects,ext,allprojects.ext,使它成为ext中的变量,而不是方法等等),不同地引用它(比如rootProject.foo、rootProject.foo()、ext.foo()等)--似乎没有什么效果。
有什么想法吗?
发布于 2017-01-01 03:10:14
Vars需要在ext命名空间中声明,以便向下游传播。尝试:
ext.foo = {
println("foo")
}参考文献:https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html
https://stackoverflow.com/questions/41412975
复制相似问题