Gradle 复合构建无法解析传递依赖

Gradle composite build can't resolve transitive dependencies

我有一个依赖库 B 的项目 A,我正在使用 gradle 复合构建。

项目 B 包含几个常见的依赖项,例如“org.apache.commons:commons-lang3”

项目 A 也使用“org.apache.commons:commons-lang3”,但传递依赖项解析没有像我预期的那样工作,我必须再次声明“org.apache.commons:commons-lang3”项目 A build.gradle 的依赖块以使其工作。

项目 A build.gradle:

group = 'org.example.app'
version = '0.1.0'

plugins {
   id 'java'
   id 'application' 
}

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}

dependencies {
    implementation 'org.example.libs:B'
}

项目 A settings.gradle

includeBuild '../../libs/B'

项目 B build.gradle:

group = 'org.example.libs'
version = '0.1.0

plugins {
   id 'java-library'
}

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}

dependencies {
    implementation 'org.apache.commons:commons-lang3:3.12.0'
}

repositories {
    mavenCentral()
}

项目 B 可以独立编译,但是如果不再次添加我就无法编译项目 A “org.apache.commons:commons-lang3:3.12.0”在其 build.gradle 中。难道它不应该作为项目 B 的传递依赖来解决吗?

项目 A 编译抛出错误,例如:

error: package org.apache.commons.lang3 does not exist

我错过了什么?

这可能已经回答了很多次,但我找不到一个好的答案。

要使传递依赖项可用,您必须在项目 B 中使用 api 而不是 implementation

dependencies {
    api 'org.apache.commons:commons-lang3:3.12.0'
}

如果您以前有使用 maven 的经验,您将需要忘记很多东西,因为 gradle 是一个非常不同的野兽,阅读手册非常值得(即使它有点乏味)