Gradle includeBuild 与实现项目

2024-03-23

之间的主要区别是什么includeBuild(...) and implementation(project(...))在 Gradle 构建系统中?阅读文档后我无法真正看到用例差异:

  1. https://docs.gradle.org/current/userguide/declaring_dependency.html#sub:project_dependency https://docs.gradle.org/current/userguide/declaring_dependencies.html#sub:project_dependencies
  2. https://docs.gradle.org/current/userguide/composite_builds.html#separate_composite https://docs.gradle.org/current/userguide/composite_builds.html#separate_composite

我想做的事情:为两个独立的项目共享相同的代码库:数据类(kotlix.serialization)、外部数据库 dao、接口。它不是一个完整的库,而只是一些代码片段。

如何连接 Intellij 中的两个项目以便类型提示起作用?


复合构建(通过使用includeBuild) 是一种在自治 Gradle 项目之间创建依赖关系的方法。
项目导入,是一种在同一 Gradle 项目中的两个模块之间创建依赖关系的方法。

复合构建功能更强大,也意味着成为传统上使用 gradle 配置在多个项目之间进行分解的新方法buildSrc技术。 我找到了这个《构建大型项目》 https://docs.gradle.org/current/userguide/structuring_software_products.html#defining_custom_project_types_as_convention_plugins文章比“复合构建” https://docs.gradle.org/current/userguide/composite_builds.html doc.

在 Gradle 中可以找到一个展示 Composite Builds 强大功能的优秀示例项目样本结构软件项目 https://docs.gradle.org/current/samples/sample_structuring_software_projects.html.

项目依赖案例

这棵树看起来像这样:

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")

复合材料建造案例

这些项目不需要有共同的“伞”根项目。 每个项目都是一个完全独立的项目。

一个项目可以简单地声明对另一个项目的依赖关系(甚至目标项目都不知道这一点)。

Tree:

project1/build.gradle.kts
project1/settings.gradle.kts
project2/build.gradle.kts
project2/settings.gradle.kts

In project1/settings.gradle.kts:

rootProject.name = "project1"
includeBuild("../project2") //No more ':' as it is not a module

In project2/settings.gradle.kts:

rootProject.name = "project2"

In project1/build.gradle.kts像这样:

dependencies {
   implementation("com.domain:project2")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gradle includeBuild 与实现项目 的相关文章

随机推荐