java - Gradle 复合构建无法解决传递依赖
问题描述
我有一个依赖于库 B 的项目 A,我正在使用 gradle 复合构建。
项目 B 包含几个常见的依赖项,例如“org.apache.commons:commons-lang3”
项目 A 也使用“org.apache.commons:commons-lang3”,但传递依赖项解析不能像我预期的那样工作,我必须在项目的依赖项块中再次声明“org.apache.commons:commons-lang3”一个 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 可以独立编译,但如果不在其 build.gradle 中再次添加“org.apache.commons:commons-lang3:3.12.0”,我将无法编译项目 A。它不应该被解决为来自项目 B 的传递依赖吗?
项目 A 编译会引发错误,例如:
error: package org.apache.commons.lang3 does not exist
我错过了什么?
解决方案
这可能已经回答了很多次,但我找不到一个好的答案。
为了使传递依赖可用,您必须使用api
而不是implementation
在项目 B 中。
dependencies {
api 'org.apache.commons:commons-lang3:3.12.0'
}
如果你以前有 maven 的经验,你需要忘记很多东西,因为 gradle 是一个非常不同的野兽,阅读手册是非常值得的(即使它有点乏味)
推荐阅读
- python - Tkinter 窗口停止自动启动
- javascript - 如何阅读 Javascript 错误?
- python-3.x - 如何允许超级用户访问 Django 管理面板
- node.js - 无法连接到数据库 - NEST.JS 和 TypeORM
- javascript - 如何在没有声音的情况下自动播放视频?
- javascript - 'UnhandledPromiseRejectionWarning: MongoParseError: Invalid connection string' 问题正在发生我不知道是什么问题
- python - 如何标准化geopandas plot python的颜色图
- c++ - 分配值期间数据之间的字节丢失
- pdf - NetSuite 高级 PDF/HTML 模板
- python - 熊猫按条件计算分组元素