includeBuild(...)
之间的主要区别是什么?和 implementation(project(...))
在 Gradle 构建系统中?阅读文档后,我无法真正看到用例差异:
我正在尝试做的事情:为两个独立的项目共享相同的代码库:数据类(kotlix.serialization)、外部数据库 dao、接口(interface)。它不是一个完整的库,而只是一些代码片段。
如何连接 Intellij 中的两个项目以便类型提示起作用?
最佳答案
复合构建 (通过使用 includeBuild
)是一种在自治 Gradle 项目之间创建依赖关系的方法。
项目导入 , 是一种在同一个 Gradle 项目中的两个模块之间创建依赖关系的方法。
复合构建 功能更强大,也意味着成为您传统上使用 buildSrc
在多个项目之间分解 gradle 配置的新方法技术。
我找到了 "Structuring Large Projects"文章比 "Composite Builds" 更容易阅读博士。
可以在 Gradle sample_structuring_software_projects 中找到一个演示复合构建强大功能的优秀示例项目。 .
项目依赖案例
树看起来像这样:
settings.gradle.kts
module1/build.gradle.kts
module2/build.gradle.kts
您在 module1/build.gradle.kts
中声明了一个依赖项像这样 :dependencies{
implementation(project("com.domain:module2))
}
仅当两个项目都被声明为公共(public)根项目的子模块时,才会解决依赖关系。这意味着你有一个根
settings.gradle.kts
像这样 :rootProject.name = "rootProject"
include(":module1")
include(":module2")
复合构建案例这些项目不需要有共同的“伞”根项目。
每个项目都是一个完全独立的项目。
一个项目 cas 只是简单地声明了对另一个项目的依赖(甚至目标项目都不知道)。
树 :
project1/build.gradle.kts
project1/settings.gradle.kts
project2/build.gradle.kts
project2/settings.gradle.kts
在 project1/settings.gradle.kts
:rootProject.name = "project1"
includeBuild("project2") //No more ':' as it is not a module
在 project2/settings.gradle.kts
:rootProject.name = "project2"
在 project1/build.gradle.kts
像这样 :dependencies{
implementation(project("com.domain:project2"))
}
关于Gradle includeBuild vs 实现项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60464719/