快捷搜索: 王者荣耀 脱发

JDK8 升级 JDK9 迁移笔记(没屁事建议直接转战11)

由于jdk9 并不打算向后兼容,取消了jre和模块化,当我们直接使用的时候就会遇到很多问题

负、方法中用到的命令意思

–add-modules

添加module到root set中,方便解决模块依赖关系,说白了运行时使用

–add-opens

使模块里面的包对其他模块开放,可以在运行期使用深层反射访问该程序包中的所有成员类,否则异常会出来跟你说要加什么的,非常方便

零、查看当前环境存在的模块

通过如下方法也可以看到当前支持的模块 (1)通常我们只需要在{JAVA_HOME}/jmods下即可看到 (2)命令:./bin/java --list-modules

一、迁移环境

1、迁移前版本讯息

中间件 版本 jetty 9.4.40 jdk 1.8.291

2、迁移后版本讯息

中间件 版本 jetty 9.4.40 jdk 1.9.0.4

二、问题解决方案

0、基础性模块(一定给我加上)

启动参数: --add-modules=java.xml.bind,java.xml.ws 加上可以避免很多后续需要补充的模块

1、通常是使用webservice的项目

(1)java.xml.ws.Endpoint Not found

引入所需依赖模块:java.xml.bind、java.xml.ws 启动参数: --add-modules=java.xml.bind,java.xml.ws

(2)java.xml.annotation Not found (没加base模块的进来)

引入所需依赖模块:java.xml.ws.annotation 启动参数: --add-modules=java.xml.ws.annotation (求你了,别偷懒了,加上base模块,少很多麻烦)

2、消除 Illegal Access 信息

总体来说是因为引用到的包/模块未被开放 启动参数:--add-opens java.base/java.lang=ALL-UNNAMED

3、避免调用系统方法出现 InaccessibleObjectException

参考上一个 启动参数:--add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED

4、面向切面的低版本问题

org.aspectj.apache.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 18

可以升级到aspectjweaver-1.8.13.jar https://mvnrepository.com/artifact/org.aspectj/aspectjweaver/1.8.13 说到底是常量变更了,这里找不到
经验分享 程序员 微信小程序 职场和发展