在gradle构建系统中includeBuild(...)
和implementation(project(...))
之间的主要区别是什么。阅读文档后,真的看不到用例的区别吗?
https://docs.gradle.org/current/userguide/declaring_dependencies.html#sub:project_dependencies
https://docs.gradle.org/current/userguide/composite_builds.html#separate_composite
我要做什么:为两个单独的项目共享相同的代码库:数据类(kotlix.serialization),外部数据库dao,接口。它不是一个完整的库,而只是一些代码片段。
如何在Intellij中连接两个项目,以便类型提示起作用。
答案 0 :(得分:1)
我有同样的问题。在第一个链接上阅读时,下一段显示:
模块依赖项的本地分支
模块依赖性可以由对本地fork的依赖性替代 该模块的来源,如果模块本身是使用 摇篮。这可以通过使用复合构建来完成。这允许 例如,您要解决在 通过使用并构建本地修补版本来替代应用程序 已发布的二进制版本。有关详细信息,请参见 复合材料构建部分。
所以,这应该是我的实施项目。
P.S。代码完成工作在我的一个子项目中,而在另一个项目中却没有。我仍在设法弄清楚
答案 1 :(得分:1)
复合构建(通过使用 includeBuild
)是一种在自治 Gradle 项目之间创建依赖项的方法。
项目导入,是一种在同一个 Gradle 项目中的两个模块之间创建依赖关系的方法。
Composite Build 功能要强大得多,而且还意味着成为在多个项目之间分解 gradle 配置的新方法,您通常使用 buildSrc
技术进行这种分解。
我发现这篇 "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))
}
仅当两个项目都声明为公共根项目的子模块时,才会解析依赖项。
这意味着你有一个像这样的根 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"))
}