在Gradle中继承行为?

时间:2016-02-03 21:27:54

标签: maven gradle

我是一名Gradle新手和一位经验丰富的Maven手。虽然到目前为止我喜欢Gradle,但我已经失去了Maven的一个功能 - 无论是因为它不存在,还是因为我还没有找到它,或者因为它被称为其他东西。

在Maven中有一个继承的概念,通过它,一个POM可以从父级继承属性和某些行为,并且因为父POM也可以拥有父级,来自祖父级POM等。这意味着可以模拟一些构建行为。这是我希望能够做到的事情,因为我正在设计旧的和硬件构建系统的替代品(称为这些"规则")。在Maven父母中定义的任何此类属性或行为都可以在孩子中被覆盖。

有人能指出我在Gradle中找到类似概念的地方吗?

我没有完全了解我之后的所有文档,但也许我错过了它?我查看了Gradle的comparison chart并找到了#34;命名域对象容器",被描述为一个非常强大的功能"但链接指向javadoc,而不是指示如何使用它 然后是"用于预配置构建的多个混合"这听起来也很有趣但又没有任何例子。

提前感谢任何可以提供帮助的人。

更新:我在此重复我在下面的评论中所说的内容,以强调我在这里要完成的工作:

在我的情况下,有数百个的多构建项目,其子项目大多属于几个类别中的一个,每个类别都有一致的结构和假设(关于目录结构,使用的rpm脚本,等等。我不想将所有这些一致性存储在父级中(在每个父项目中需要重复的位置),而是存在于某些"元层"生活在所有父项目的层面上,并且可以访问所有子项目。这种可访问性可能应该通过父项目实现,但不应该驻留在那里。

2 个答案:

答案 0 :(得分:0)

使用gradle这个概念不是那么多的继承,而是它的组合。一个人建立插件,其他谨慎的gradle文件,或两者兼有,然后“适用”'他们到其他项目。

因此,在多项目构建(Gradle MultiProjectBuild)中,通常使用' root'项目配置自己和它的孩子。这可以通过多种方式完成:

allprojects {
    task hello << {task -> println "I'm $task.project.name" }
}
subprojects {
    hello << {println "- I depend on water"}
}

或者

configure(allprojects) { project ->
    project.hello << {task -> println "I'm $task.project.name"}
}

configure(subprojects) { project ->
    project.hello << {println "- I depend on water"}
}

答案 1 :(得分:0)

答案似乎是Initialization Scripts

这些在运行任何构建之前运行,可用于设置默认值。无论如何,他们做我需要他们做的事。