Ubuntu怎么快速切换JDK版本

目前我的Ubuntu系统的环境变量都配置在/etc/profile,如果是其它配置目录也是完全可以的

PS:配置在/etc/profile目录主要是防止在自己系统上切换不同的用户,又需要重新下载软件或者配置环境变量

和Java相关的配置如下所示

注意:可能需要重启机器让配置文件生效,或者暂时使用source命令,/etc/profile配置文件是启动机器时候生效,如果切换终端或者没有执行source命令,将不会生效

/etc/profile配置文件内容

/etc/profile配置文件内容如下

export JAVA_HOME=/usr/local/java/current
export PATH=$JAVA_HOME/bin:$PATH

ln命令建立软链接

首先进入/usr/local/java目录,执行以下命令

sudo ln -s jdk-17.0.5 /usr/local/java/current

/usr/local/java目录中最开始只有以下内容

drwxr-xr-x  9 root root 4096 11月 11 16:05 jdk-17.0.5/
drwxr-xr-x  7 root root 4096 11月 11 16:27 jdk1.8.0_201/

执行完ln命令以后/usr/local/java目录中增加一条软链接

lrwxrwxrwx  1 root root   10 11月 11 16:29 current -> jdk-17.0.5/
drwxr-xr-x  9 root root 4096 11月 11 16:05 jdk-17.0.5/
drwxr-xr-x  7 root root 4096 11月 11 16:27 jdk1.8.0_201/

快速切换jdk版本

只需要修改软链接即可

进入到/usr/local/java目录,执行以下命令

sudo ln -snf jdk-17.0.5 /usr/local/java/current
or
sudo ln -snf jdk1.8.0_201 /usr/local/java/current

或者执行在任意目录执行以下命令

sudo ln -snf /usr/local/java/jdk1.8.0_201 /usr/local/java/current
or
sudo ln -snf /usr/local/java/jdk-17.0.5 /usr/local/java/current

为什么要这么做

在很多开源项目中,如果在终端去进行编译,还是比较依赖于系统里面是不是配置了JAVA_HOME,建立软链接这种方式就在不破坏JAVA_HOME的前提下,实现了快速切换JDK版本

解决这个问题的来源

我在尝试构建Quarkus应用时,系统一直报出以下错误

命令:quarkus create && cd code-with-quarkus

错误如下所示

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: io/quarkus/cli/Main 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

关键信息是:class file version 55.0

这个错误是:我们的类是在比我们试图运行它的版本更高的Java版本上编译的。更具体地说,在这种情况下,使用Java 11编译了我们的类,并尝试使用 Java 8 运行它

参考内容:https://www.baeldung.com/java-lang-unsupportedclassversion

主要版本的映射如下所示

45 = Java 1.1
46 = Java 1.2
47 = Java 1.3
48 = Java 1.4
49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
© 版权声明
THE END