一 gradle版本和jdk版本对照
(一)gradle和jdk版本对应
项目使用gradle为编译工具,gradel和jdk版本对应关系如下
gradle官方地址:版本对应关系
gradle版本从gradle-6.9升级到了gradle-7.3
(二)修改template.gradle
原来使用compile添加依赖,升级后需要根据引用范围改为implementation或者api。
api
当其他模块依赖于此模块时,此模块使用api声明的依赖包是可以被其他模块使用
implementation
当其他模块依赖此模块时,此模块使用implementation声明的依赖包只限于模块内部使用,不允许其他模块使用。
二 lombok升级
(一)现象
启动报错信息:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project encloud-common: Fatal error compiling: java.lang.ExceptionInInitializerError: Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not "opens com.sun.tools.javac.processing" to unnamed module
可以看到是访问java内部class的时候出的问题,这个问题是因为Lombok正在使用反射来访问内部JDK API,在以前的Java版本中,这会导致警告消息,而在jdk9之后的版本中是直接抛出了错误(具体原因没有弄的很清楚,估计要详细的了解下JDK9的变话。欢迎指出)。
(二)解决办法
升级lombok版本
lombok:1.16.20 -- > lombok:1.18.24
三 包无法导入
(一)javax.jws包
如图可以看到JDK8的时候我们可以引入rt包下内容,但是升级到17后会找不到rt包,导致我们无法正常引入:
(二)原因
因为jdk9引入了模块化的概念,JDK 自身也拆分成为一系列模块,可以通过 jlink 组装出一个自定义的 jre 环境,让程序占用的空间更小。rt.jar 和 tools.jar 被移除。此时我们需要自己将依赖添加进来:
gradle:implementation group: 'javax.jws', name: 'javax.jws-api', version: '1.1'
maven:
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>gradle:group: 'javax.xml.ws', name: 'jaxws-api', version: '2.3.1'
maven:
<dependency><groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>