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

目录

  • 负、方法中用到的命令意思
      • --add-modules
      • --add-opens
  • 零、查看当前环境存在的模块
  • 一、迁移环境
    • 1、迁移前版本讯息
    • 2、迁移后版本讯息
  • 二、问题解决方案
    • 0、基础性模块(一定给我加上)
    • 1、通常是使用webservice的项目
      • (1)java.xml.ws.Endpoint Not found
      • (2)java.xml.annotation Not found (没加base模块的进来)
    • 2、消除 Illegal Access 信息
    • 3、避免调用系统方法出现 InaccessibleObjectException
    • 4、面向切面的低版本问题
      • org.aspectj.apache.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 18

由于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.bindjava.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
说到底是常量变更了,这里找不到

你可能感兴趣的:(中间件迁移升级,jdk9,升级jdk)