gpt4 book ai didi

gradle - 在根中定义的闭包在 child 中不可见

转载 作者:行者123 更新时间:2023-12-03 03:20:14 25 4
gpt4 key购买 nike

我有根项目和子项目( :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由 child 的构建文件调用(因为我希望它只被一些子模块调用)。
documentation似乎很清楚: In a multi-project build, sub-projects inherit the properties and methods of their parent project
但是,将上面的“afterEvaluate” block 移动到 child/build.gradle导致错误: Could not find method foo() for arguments [] on project ':child' of type org.gradle.api.Project .

为什么会发生这种情况,我该如何解决?我已经尝试了一大堆不同的变化 - 移动 def周围(到 buildscriptallprojects ,到 ext ,到 allprojects.ext ,使其成为 ext 中的变量,而不是方法等),以不同的方式引用它(如 rootProject.foorootProject.foo()ext.foo() 等) - 似乎没有任何效果。

有任何想法吗?

最佳答案

Vars 需要在 ext 命名空间中声明,以便它们向下游传播。尝试:

ext.foo = {
println("foo")
}

引用: https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html

关于gradle - 在根中定义的闭包在 child 中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41412975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com