所有项目和子项目之间有什么区别

时间:2012-08-22 16:02:51

标签: gradle

在多项目gradle构建中,有人可以告诉我“allprojects”部分与“子项目”部分之间究竟有什么区别?只是父目录?有没有人同时使用?如果是这样,您是否有一般规则来确定每个规则中的典型内容?

相关问题:两种语法之间有什么区别(实际上对于所有项目和子项目):

subprojects {  ...
}

configure(subprojects) { ...
}

你什么时候一个在另一个上面?

2 个答案:

答案 0 :(得分:99)

在多项目gradle构建中,您有一个rootProject和子项目。两者的结合都是项目。 rootProject是构建开始的地方。常见的模式是rootProject没有代码,子项目是java项目。在这种情况下,您只将java插件应用于子项目:

subprojects {
    apply plugin: 'java'
} 

这相当于只构建子模块的maven聚合pom项目。

关于这两种语法,它们完全相同。第一个看起来更好。

答案 1 :(得分:39)

添加到Ryan的答案中,当您想要配置对象的自定义子集时,configure方法变得很重要。例如configure([project(":foo"), project(":bar")]) { ... }configure(tasks.matching { it.name.contains("foo") }) { ... }

何时使用allprojectssubprojects取决于具体情况。通常你会同时使用两者。例如,像Java插件这样的代码相关插件通常应用于subprojects,因为在许多版本中,根项目不包含任何代码。另一方面,Eclipse和IDEA插件通常应用于allprojects。如有疑问,请查看示例和其他构建和/或实验。总体目标是避免不相关的配置。从这个意义上讲,只要subprojects给出预期结果,allprojects优于{{1}}。