JDK8 升级 JDK9 迁移笔记(没屁事建议直接转战11)
由于jdk9 并不打算向后兼容,取消了jre和模块化,当我们直接使用的时候就会遇到很多问题
负、方法中用到的命令意思
–add-modules
添加module到root set中,方便解决模块依赖关系,说白了运行时使用
–add-opens
使模块里面的包对其他模块开放,可以在运行期使用深层反射访问该程序包中的所有成员类,否则异常会出来跟你说要加什么的,非常方便
零、查看当前环境存在的模块
通过如下方法也可以看到当前支持的模块 (1)通常我们只需要在{JAVA_HOME}/jmods下即可看到 (2)命令:./bin/java --list-modules
一、迁移环境
1、迁移前版本讯息
2、迁移后版本讯息
二、问题解决方案
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 说到底是常量变更了,这里找不到