Gradle复合构建无法解决传递依赖项[重复]
Posted
技术标签:
【中文标题】Gradle复合构建无法解决传递依赖项[重复]【英文标题】:Gradle composite build can't resolve transitive dependencies [duplicate] 【发布时间】:2021-10-20 01:23:37 【问题描述】:我有一个依赖库 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 的传递依赖吗?
Project A Compilation 抛出错误,例如:
error: package org.apache.commons.lang3 does not exist
我错过了什么?
【问题讨论】:
【参考方案1】:这可能已经回答了很多次了,但我找不到一个好的答案。
要使传递依赖可用,您必须在项目 B 中使用 api
而不是 implementation
。
dependencies
api 'org.apache.commons:commons-lang3:3.12.0'
如果你以前有使用过 maven 的经验,那么你需要忘掉很多东西,因为 gradle 是一个非常不同的野兽,阅读手册是非常值得的(即使它有点乏味)
【讨论】:
以上是关于Gradle复合构建无法解决传递依赖项[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle 插件Android 依赖管理 ⑤ ( Gradle 依赖优化 | 命令行查看依赖模块 | 依赖冲突问题 | 依赖传递冲突 | 分库冲突 | 依赖分组不同导致冲突 )