Gradle includeBuild 与实现项目

Jan*_*elý 30 gradle gradle-kotlin-dsl

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

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

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

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

Ren*_*aud 38

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

复合构建的功能要强大得多,并且也是传统上使用该buildSrc技术在多个项目之间分解 gradle 配置的新方法。我发现这篇“构建大型项目”文章比“复合构建”文档更容易阅读。

可以在 Gradle Sample_structuring_software_projects中找到展示复合构建功能的优秀示例项目。

项目依赖案例

这棵树看起来像这样:

settings.gradle.kts
module1/build.gradle.kts
module2/build.gradle.kts
Run Code Online (Sandbox Code Playgroud)

并且您正在声明这样的依赖项module1/build.gradle.kts

settings.gradle.kts
module1/build.gradle.kts
module2/build.gradle.kts
Run Code Online (Sandbox Code Playgroud)

仅当两个项目都声明为公共根项目的子模块时,依赖关系才会得到解决。

这意味着你有一个settings.gradle.kts像这样的根:

dependencies {
   implementation(project("com.domain:module2"))
}
Run Code Online (Sandbox Code Playgroud)

复合材料建造案例

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

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

树:

project1/build.gradle.kts
project1/settings.gradle.kts
project2/build.gradle.kts
project2/settings.gradle.kts
Run Code Online (Sandbox Code Playgroud)

project1/settings.gradle.kts

rootProject.name = "rootProject"
include(":module1")
include(":module2")
Run Code Online (Sandbox Code Playgroud)

project2/settings.gradle.kts

project1/build.gradle.kts
project1/settings.gradle.kts
project2/build.gradle.kts
project2/settings.gradle.kts
Run Code Online (Sandbox Code Playgroud)

project1/build.gradle.kts这样:

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

  • 您引用的是带有“com.domain:”前缀的project2。你从哪里得到它? (13认同)