问题的产生
一般创建 JAVA 项目的时候会使用插件
plugins {
id 'java'
}
在 7.2+(具体哪一个版本不清楚),在多模块之间的依赖使用 project,如下所示
// 模块 A
dependencies {
implementation 'cn.hutool:hutool-all:5.5.4'
}
// 模块 B
dependencies {
implementation project(':模块A')
}
传递依赖变更了,7.2+ 之前传递给依赖该项目的时候是,编译和运行时都有,而在 7.2+ 之后,就变成了运行时了。从右侧面板也可以看到,编译时已经没有了,只在运行时出现
注:上图的 plugins 中使用 java 插件是一样的效果
导致的问题是什么?
模块 B 依赖了模块 A,在之前,在模块 B 里面可以直接使用 模块 A 里面依赖的 hutool-all 这个包,因为依赖被传递了,现在不行了,在开发期间你不能使用这个依赖了,但是你能使用 模块 A 中的类,这个类里面肯定是可以使用 hutool 相关的工具类。
这是怎么做到的?
原来,依赖依然会传递,但是传递后的范围变成了 运行时,也就是说你在编译的时候无法使用 hutool 的包,但是在运行的时候可以使用,不会报错。
解决方案
- 更换插件为 java-library
implementation 'cn.hutool:hutool-all:5.5.4'
声明改为api 'cn.hutool:hutool-all:5.5.4'