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 是一个非常不同的野兽,阅读手册非常值得(即使它有点乏味)
我有一个依赖库 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 是一个非常不同的野兽,阅读手册非常值得(即使它有点乏味)