您可以使用 IntelliJ 原生导入器Eclipse Buildship 在 IDE 中打开此示例。

声明被包含构建替换的依赖项

默认情况下,Gradle 会配置每个包含的构建,以确定它可以提供的依赖项。执行此操作的算法非常简单:Gradle 会检查包含构建中项目的 groupname,并用项目依赖项替换任何匹配的外部依赖项。

dependencySubstitution 术语中,默认替换是

dependencySubstitution {
    ... for each project in included build ...
    substitute module("${project.group}:${project.name}") using project(":${project.name}")
}

声明包含构建的替换

有时,Gradle 确定的默认替换不足,或者在特定复合中不需要它们。对于这些情况,可以显式声明包含构建的替换。

例如,一个名为“unpublished”的单项目构建,它生成一个 Java 实用程序库,但没有为 group 属性声明值

build.gradle.kts
plugins {
    java
}
build.gradle
plugins {
    id 'java'
}

当此构建包含在复合构建中时,它将尝试替换依赖模块 `undefined:unpublished`(`undefined` 是 `project.group` 的默认值,`unpublished` 是根项目的名称)。显然,这在复合构建中不会非常有用。

为了在复合构建中按原样使用 `unpublished` 库,复合构建可以显式声明它提供的替换。

settings.gradle.kts
includeBuild("anonymous-library") {
    dependencySubstitution {
        substitute(module("org.sample:number-utils")).using(project(":"))
    }
}
settings.gradle
includeBuild('anonymous-library') {
    dependencySubstitution {
        substitute module('org.sample:number-utils') using project(':')
    }
}

使用此配置,复合构建将用对 `anonymous-library` 的根项目的依赖替换对 `org.sample:number-utils` 的任何依赖。