JDK9和JDK10:NoClassDefFoundError: javax/activation/MimetypesFileTypeMap

JDK9和JDK10:NoClassDefFoundError: javax/activation/MimetypesFileTypeMap

线上服务器的版本是jdk1.7,但是很多业务都是用1.8写的,强行升级了一波,发现一个服务死了。一直报错说找不到该文件。
这个文件不是JSE自带的吗??
初步分析肯定是JDK兼容造成的。
网上找了一圈没有找到类似的案例,去git上面的issue列表看了一下,有不少同道中人,参考资料主要是三点:

  • JAVA9增加了一个模块化特性,把这些JEE的模块默认都撸掉了
  • 必要的情况下需要用JAVA9提供的–add-modules把这些撸掉的模块加进去
  • 其中涉及到的关键知识就是root module

jse自带的模块(使用java -d java.se查询)

java.se@10.0.2
requires java.sql transitive
requires java.rmi transitive
requires java.naming transitive
requires java.datatransfer transitiv
requires java.logging transitive
requires java.xml transitive
requires java.security.sasl transiti
requires java.security.jgss transiti
requires java.scripting transitive
requires java.management transitive
requires java.desktop transitive
requires java.compiler transitive
requires java.prefs transitive
requires java.instrument transitive
requires java.sql.rowset transitive
requires java.base mandated
requires java.management.rmi transit
requires java.xml.crypto transitive


javaEE 的模块(java -d java.se.ee)

java.se.ee@10.0.2
requires java.base mandated
requires java.xml.bind transitive
requires java.transaction transitive
requires java.xml.ws transitive
requires java.activation transitive
requires java.corba transitive
requires java.xml.ws.annotation transitive
requires java.se transitive

正确的启动命令类似下面这样

java -jar –add-modules=java.activation,java.xml.bind xxxx.jar

以上可以不变更代码、不重新编译的情况下完成jdk升级兼容,改个启动命令还是风险比较小的。

上面是官方正解,其他方案很多,不要乱用,操作越骚风险越高。

pom或gradle中增加这些包的依赖
下载依赖包,导入依赖??跟上面那个没有区别吗?有区别!!!
不要升级到JAVA9以及以上

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值