allproject和subprojects有什么区别


124

在多项目gradle构建中,有人可以告诉我“ allprojects”部分和“ subprojects”部分之间到底有什么区别吗?只是父目录?有人同时使用吗?如果是这样,您是否有一般规则来确定每个规则通常包含的内容?

相关问题:两种语法之间的区别是什么(对所有项目和子项目都是如此):

subprojects {  ...
}

configure(subprojects) { ...
}

您什么时候可以彼此竞争?

Answers:


119

在多项目gradle构建中,您具有rootProject和子项目。两者的结合是所有项目。rootProject是构建的起点。常见的模式是rootProject没有代码,子项目是Java项目。在这种情况下,您将Java插件仅应用于子项目:

subprojects {
    apply plugin: 'java'
} 

这将等效于仅构建子模块的Maven聚合pom项目。

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


我正在尝试理解您的答案,为什么有人要“ rootProject没有代码”?
玛丽安(MarianPaździoch)

6
它可以具有代码,但是大多数情况下,它只是用于在单个根项目下合并所有子项目。
mallaudin

44

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

何时使用allprojectsvs. subprojects取决于具体情况。通常,您会同时使用两者。例如,与代码相关的插件(如Java插件)通常应用于subprojects,因为在许多构建中,根项目均不包含任何代码。另一方面,Eclipse和IDEA插件通常应用于allprojects。如有疑问,请查看示例以及其他构建和/或实验。总体目标是避免不相关的配置。从这个意义上讲,subprojects它比allprojects给出预期结果要好。


如果我的某些子项目依赖协议缓冲区怎么办?我应该对所有应用proto-gradle-plugin吗?或sub或仅对sub中的少数几个项目?
user1870400 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.