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 依赖优化 | 命令行查看依赖模块 | 依赖冲突问题 | 依赖传递冲突 | 分库冲突 | 依赖分组不同导致冲突 )

添加 Firebase 依赖项后 Gradle 同步失败:打包 APK 期间文件重复

MAVEN 无法解决依赖关系 [重复]

Gradle教程第一章:1.8复合构建

Gradle 无法构建具有 Docker 依赖项的 JAR

安卓工作室 3.6.1 |错误:“此项目使用 AndroidX 依赖项”[重复]