问题的产生

一般创建 JAVA 项目的时候会使用插件

  1. plugins {
  2. id 'java'
  3. }

在 7.2+(具体哪一个版本不清楚),在多模块之间的依赖使用 project,如下所示

  1. // 模块 A
  2. dependencies {
  3. implementation 'cn.hutool:hutool-all:5.5.4'
  4. }
  5. // 模块 B
  6. dependencies {
  7. implementation project(':模块A')
  8. }

传递依赖变更了,7.2+ 之前传递给依赖该项目的时候是,编译和运行时都有,而在 7.2+ 之后,就变成了运行时了。从右侧面板也可以看到,编译时已经没有了,只在运行时出现
image.png
注:上图的 plugins 中使用 java 插件是一样的效果

导致的问题是什么?
模块 B 依赖了模块 A,在之前,在模块 B 里面可以直接使用 模块 A 里面依赖的 hutool-all 这个包,因为依赖被传递了,现在不行了,在开发期间你不能使用这个依赖了,但是你能使用 模块 A 中的类,这个类里面肯定是可以使用 hutool 相关的工具类。

这是怎么做到的?
原来,依赖依然会传递,但是传递后的范围变成了 运行时,也就是说你在编译的时候无法使用 hutool 的包,但是在运行的时候可以使用,不会报错。

解决方案

  1. 更换插件为 java-library
  2. implementation 'cn.hutool:hutool-all:5.5.4' 声明改为 api 'cn.hutool:hutool-all:5.5.4'

image.png