java版本配置造成脚本无法启动服务

场景:使用jenkins部署java,以前45服务器是使用的jdk8,新项目需要指定是jdk17,只写了环境变量

本地使用普通用户执行

java -version

返回了我们所需要的版本:

java -version
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)

问题:本地执行bash start启动不会出现问题,当使用jenkins通过ssh -t 进入服务所在服务器执行时候,无法启动对应的java服务。发现应用打出了如下日志:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/JarLauncher has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes
class file versions up to 52.0

原因:

这个错误信息说明你正在尝试运行一个使用比你当前安装的 Java 版本更高的版本编译的 Java 程序。具体来说,你想要运行的类文件(在这种情况下是 org/springframework/boot/loader/JarLauncher)是使用 Java 17 编译的(类文件版本号为 61.0),但你正在尝试使用版本较旧的 Java 运行它,而该版本只能识别类文件版本号最高为 52.0(对应 Java 8)的类文件。

要解决这个问题,你可以采取以下措施之一:

  1. 将你的 Java 安装升级到支持类文件版本号 61.0 或更高的版本。你可以从 Oracle 网站或 OpenJDK 网站下载最新版本的 Java。

  2. 使用与你当前的 Java 安装兼容的 Java 编译器重新编译 Java 程序。如果你有源代码的访问权限,你可以使用较低版本的 Java 编译代码,以生成与你当前安装兼容的类文件。例如,如果你正在运行 Java 8,你可以使用 -target 8 标志编译代码,以生成与 Java 8 兼容的类文件。

一旦你解决了版本不匹配的问题,你就可以在没有遇到 UnsupportedClassVersionError 的情况下运行 Java 程序了。

解决:

查看系统默认java

alternatives --config java
 
There is 1 program that provides 'java'.
 
Selection Command
-----------------------------------------------
*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre/bin/java)
 
发现默认只有一个jdk8
 
寻找当前配置的java在哪里
whereis java
java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /home/jdk/jdk-17.0.2/bin/java /usr/share/man/man1/java.1.gz
 
将新的java添加到系统
sudo update-alternatives --install /usr/bin/java java /home/jdk/jdk-17.0.2/bin/java 300
 
配置新的jdk17为默认值
alternatives --config java
 
There are 2 programs which provide 'java'.
 
Selection Command
-----------------------------------------------
*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre/bin/java)
2 /home/jdk/jdk-17.0.2/bin/java
 
Enter to keep the current selection[+], or type selection number: 2
 
 
重新启动,完成
 
 
 
引申:

在 Linux 上同时安装了多个版本的 JDK 后,你可以使用 `update-alternatives` 命令来设置默认版本。`update-alternatives` 命令是一个命令行工具,用于在 Debian 系统中管理软件的替代品。

以下是设置默认 JDK 版本的步骤:

1. 打开终端窗口并使用管理员权限运行命令 `update-alternatives --config java`。

2. 这将会显示当前安装的 JDK 版本列表,并提示你要选择哪个版本作为默认版本。使用数字键选择你想要的默认 JDK 版本,并按 Enter 键。

3. 接下来,使用 `update-alternatives --config javac` 命令来设置默认的 Java 编译器版本。同样,选择你想要的默认 JDK 版本,并按 Enter 键。

4. 现在你已经成功设置了默认的 JDK 版本。你可以使用 `java -version` 和 `javac -version` 命令来验证默认 JDK 版本是否正确。

请注意,不同的 Linux 发行版可能略有不同的 `update-alternatives` 命令选项。如果以上步骤无法正常工作,请参考你的 Linux 发行版的文档,以获得更准确的指导。

posted @ 2023-06-15 14:55  Devinhao  阅读(312)  评论(0)    收藏  举报