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注解。

相关推荐
松仔log19 分钟前
Java多线程——对象的组合
java·开发语言·jvm
Qhumaing22 分钟前
Python学习——函数参数详解
开发语言·python·学习
酷爱码36 分钟前
springboot 动态配置定时任务
java·spring boot·后端
ElvInR1 小时前
【C语言】动态内存管理
c语言·开发语言
从未止步..1 小时前
Jenkins未在第一次登录后设置用户名,第二次登录不进去怎么办?
java·运维·jenkins
老马啸西风1 小时前
IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统
java
加油,旭杏1 小时前
【go语言】grpc 快速入门
开发语言·后端·golang
行路见知1 小时前
1.4 Go 数组
开发语言
2501_903238651 小时前
Java 9模块开发:Eclipse实战指南
java·开发语言·eclipse·个人开发
ahardstone1 小时前
【CS61A 2024秋】Python入门课,全过程记录P5(Week8 Inheritance开始,更新于2025/2/2)
开发语言·python