Gradle includeBuild与实施项目

时间:2020-02-29 11:37:45

标签: gradle gradle-kotlin-dsl

在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中连接两个项目,以便类型提示起作用。

2 个答案:

答案 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"))
}