首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在子根中不可见的根目录中定义的闭包

在子根中不可见的根目录中定义的闭包
EN

Stack Overflow用户
提问于 2017-01-01 02:30:41
回答 1查看 152关注 0票数 2

我有根项目和子项目(:child)。根构建如下所示:

代码语言:javascript
复制
def foo = {
  println("foo")
}

allprojects {
  task bar << {
    println(project.name + ":bar")
  }

  afterEvaluate {
   foo()
  }
}

运行gradle bar打印:

代码语言:javascript
复制
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 ( buildscriptallprojectsextallprojects.ext,使它成为ext中的变量,而不是方法等等),不同地引用它(比如rootProject.foorootProject.foo()ext.foo()等)--似乎没有什么效果。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-01 03:10:14

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

代码语言:javascript
复制
ext.foo = {
  println("foo")
}

参考文献:https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41412975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档