Gradle包括构建与实施项目

vulvrdjw  于 2023-02-04  发布在  其他
关注(0)|答案(2)|浏览(191)

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

  1. https://docs.gradle.org/current/userguide/declaring_dependencies.html#sub:project_dependencies
  2. https://docs.gradle.org/current/userguide/composite_builds.html#separate_composite
    我想做的是:两个独立项目共享相同的代码库:数据类(kotlix.serialization),外部数据库dao,接口。它不是一个完整的库,只是一些代码片段。
    如何在Intellij中连接这两个项目以使类型提示工作?
gcmastyq

gcmastyq1#

Composite Build(使用includeBuild)是一种在自治Gradle项目之间创建依赖关系的方法。
项目导入是一种在同一Gradle项目中的两个模块之间创建依赖关系的方法。
Composite Build的功能要强大得多,它也是一种在多个项目之间分解Gradle配置的新方法,而传统上是通过buildSrc技术来完成的。我发现这篇“构建大型项目”文章比"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")

复合构建用例

项目不需要有共同的“伞”根项目,每个项目都是一个完全独立的项目。
一个项目可以简单地声明对另一个项目的依赖关系(甚至目标项目都不知道)。
树:

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("com.domain:project2")
}
jm81lzqq

jm81lzqq2#

我也有同样的问题。阅读第一个链接,下一帕拉说:
模块依赖项的本地分支
如果模块本身是使用Gradle构建的,则模块依赖关系可以替换为对该模块源代码的本地分支的依赖关系。这可以通过使用复合构建来实现。例如,这允许您通过使用和构建来修复您在应用程序中使用的库中的问题。本地补丁版本而不是发布的二进制版本。2这一点的细节在复合构建章节中有描述。
所以,我认为这应该是一个实施项目。
代码完成在我的一个子项目上工作,但在另一个上没有。我仍在努力弄清楚

相关问题