jdk1.8升级到jdk11遇到的各种问题

一、第三方依赖使用了BASE64Decoder

如果项目中使用了这个类 sun.misc.BASE64Decoder,就会导致错误,因为再jdk11中,该类已经被删除。

复制代码
Caused by: java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder

当然这个类也有替换方式,替换方式如下:

复制代码
Base64.Encoder encoder = Base64.getEncoder();
 
Base64.Decoder decoder = Base64.getDecoder();

二、类文件具有错误的版本55.0,应为52.0

当项目编译或启动时,如果出现这个错误,那就是你编译的jdk版本和运行的jdk版本不一致导致的。

各个jdk对应的版本如下:

XML 复制代码
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

从上面可知,55是jdk11版本,52为jdk1.8版本。所以尝试修改编译的jdk版本和运行版本一致即可。

idea设置如下:

三、javax.xml.bind.annotation报错

jdk升级完后,项目报javax.xml.bind cannot resolve

原因:jdk11已经移除了javax.xml.bind包

解决方案:重新单独引用,以下给出两种引用方式,要看你项目是用Maven构建还是用gradle构建的项目,自己对应选择即可。

Maven引用方式:

XML 复制代码
<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-core</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>javax.activation</groupId>
  <artifactId>activation</artifactId>
  <version>1.1.1</version>
</dependency>

gradle引用方式:

XML 复制代码
dependencies {
	//由于jdk11删除了java.xml.bind这个包,所以这里要手动重新引入
	implementation 'javax.xml.bind:jaxb-api:2.3.0'
	implementation 'com.sun.xml.bind:jaxb-core:2.3.0'
	implementation 'com.sun.xml.bind:jaxb-impl:2.3.0'
	implementation 'javax.activation:activation:1.1.1'
}

一些额外的知识:

关于javax.xml.bind在各个jdk版本的情况。

  • jdk8:支持
  • jdk9:弃用
  • jdk10:弃用
  • jdk11:移除

四、JDK11无法使用@Resource注解

在jdk11版本以后,javax.annotation这个包被移除了,所以无法使用@Resources。

解决办法也很简单,单独引用即可。下面是用Maven中pom文件的引用方式

XML 复制代码
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

当然了,不用这个注解也行,将@Resources注解,全部替换成@Autowired注解。

相关推荐
怒放吧德德2 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆4 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
心之语歌6 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊7 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang8 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang9 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解9 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing13 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean13 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven9714 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java