JDK8升级到JDK17遇到的问题

一  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>

                

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值