发布于 

解决Java服务无法启动提示UnsupportedClassVersionError的问题

今天把一个 Java 服务放到服务器运行,报了以下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/example/test/TestApplication has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)

这个服务是最近新加的。因为最近系统做扩展,所以新加了这一个服务模块,之前一直在本地开发,今天开发完放到了服务器上。

第一眼看到这个错,我就知道是本地 Java 版本和服务器 Java 版本不一致的问题,因为本地一直用的 Java 11,而服务器一直是 Java 8,而且提示的也挺明显的。

但是其实这并不会有问题,之前的那些服务模块都在服务器上跑的好好的呢!

所以我觉得就是哪里没配置对,设置一下就好了,于是自信满满的打开 Idea 的设置:File -> Project Structure -> Project Settings。然后找到对应的模块,语言级别设置为 8,clean 后重新 package 上传。

运行,还是报错!

后面经过一番冥思苦想,想起来应该是编译器那里设置。再次打开 Idea 的设置:File -> Settings -> Java Compiler。将对应模块的 Target bytecode version 由原来的 11 改成 8,再次 clean、package、上传。

小样,还搞不定你?原神,启动!

然而,还是报错。。。

最后经过一番网上搜索,发现是 pom.xml 文件 maven 插件配置的问题。

1
2
3
4
5
6
7
8
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>

把 11 都改成 8,原神,再次启动!

这次终于启动成功了!