我有根项目和子项目(: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我需要{child}来调用孩子的构建文件(因为我希望它只能由一些子模块调用)。
documentation似乎足够清晰:foo
但是,将上方的“afterEvaluate”块移至In a multi-project build, sub-projects inherit the properties and methods of their parent project
会导致错误:child/build.gradle
。
为什么会发生这种情况,我该如何解决这个问题?我尝试了一大堆不同的变体 - 将Could not find method foo() for arguments [] on project ':child' of type org.gradle.api.Project
移动到(def
,buildscript
,移至allprojects
,移至ext
,使其成为变量在ext中,而不是方法等),以不同的方式引用它(如allprojects.ext
,rootProject.foo
,rootProject.foo()
等) - 似乎没有任何效果。
有什么想法吗?
答案 0 :(得分:1)
需要在ext命名空间中声明Vars,以便它们向下游传播。尝试:
ext.foo = {
println("foo")
}
参考:https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html