Gradle 如何将传递依赖随自定义库一同部署并被上层应用正确引用
多模块项目依赖传递配置方案
适用场景
MyApp、MyLibrary1、MyLibrary2同属一个根项目的单仓多模块架构,需要让MyApp依赖MyLibrary1时自动获取其依赖的MyLibrary2,避免运行时类缺失报错。
1. Maven 项目配置
配置MyLibrary1的pom.xml
在MyLibrary1的依赖声明中,确保MyLibrary2的依赖scope为默认的compile,不要设置为provided:
<dependencies> <dependency> <groupId>替换为你的项目groupId</groupId> <artifactId>MyLibrary2</artifactId> <version>替换为你的项目统一版本号</version> <!-- 无需额外声明scope,默认compile即可传递该依赖到上层项目 --> </dependency> </dependencies>
配置MyApp的pom.xml
仅需声明MyLibrary1的依赖即可:
<dependencies> <dependency> <groupId>替换为你的项目groupId</groupId> <artifactId>MyLibrary1</artifactId> <version>替换为你的项目统一版本号</version> </dependency> </dependencies>
2. Gradle 项目配置
配置MyLibrary1的build.gradle
使用api关键字声明MyLibrary2依赖,不要使用implementation:
dependencies { // api声明的依赖会自动传递给所有依赖当前库的项目 api project(':MyLibrary2') }
配置MyApp的build.gradle
仅需声明MyLibrary1的依赖即可:
dependencies { implementation project(':MyLibrary1') }
异常排查
如果配置后仍然报类缺失错误,可按以下步骤验证:
- 查看依赖树确认传递正常:
- Maven在MyApp目录执行
mvn dependency:tree,检查输出中是否包含MyLibrary2 - Gradle在MyApp目录执行
./gradlew dependencies(Windows执行gradlew.bat dependencies),检查runtimeClasspath下是否包含MyLibrary2
- Maven在MyApp目录执行
- 确认三个模块的版本号一致,无版本冲突导致MyLibrary2被自动排除
- 清理构建缓存后重新编译:Maven执行
mvn clean install,Gradle执行./gradlew clean build
内容的提问来源于stack exchange,提问作者hello2244
相关产品推荐
相关产品推荐

