您可以在支持 Gradle 的 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 的任何依赖项。