如何在我的机器上同时安装多个版本的Java JDK?

时间:2016-08-23 21:53:52

标签: java linux rpm

背景

我的工作主要是Java和Scala,但我们的许多遗留代码尚未更新到最新的JDK。因此,我们必须在我们的开发机器上安装JDK版本5,6,7和8。直到最近,我一直在使用Arch Linux,但我刚刚切换到OpenSuse Tumbleweed。我用来安装JDK版本的方法是从Oracle网站下载RPM安装程序脚本,然后从1.5开始安装它们,然后一直工作到1.8,这样/usr/java/latest符号链接就已经指向了正确的版本

问题

重新安装上述JDK版本后,我试图在IntelliJ IDEA中指向这些安装。但它抱怨错误“The selected directory is not a valid home for JDK”。我在网上找到了很多关于这个问题和类似问题的资源,但这些解决方案都没有对我的情况有所帮助。此外,/usr/bin中各种Java可执行文件的符号链接指向/etc/alternatives指令的大火。

3 个答案:

答案 0 :(得分:5)

解决方案

显然,Oracle发布的RPM脚本往往会破坏您安装的所有以前的JDK版本,方法是从那些较旧的安装中删除关键JAR文件,例如tools.jarrt.jar。这使得以前运行的JDK对开发人员毫无用处。

我的第一个回应是在运行第二个安装程序脚本之前重命名安装目录。但这样做会让RPM抱怨在运行第二个脚本时已经安装了JDK版本。所以hack的黑客就是安装一个版本,重命名该目录,然后用RPM“删除”该版本(即使它会抱怨无法找到与之关联的任何相应文件)。 然后您可以自由安装第二个版本,为每个版本重复前面的步骤,直到您找到要安装的最新版本。

TL; DR

以下是在同一台计算机上获取多个正在运行的JDK版本的步骤:

<强> 1。使用安装程序脚本安装第一版JDK:

:~# chmod a+x jdk-1_5_0_22-linux-amd64-rpm.bin
:~# ./jdk-1_5_0_22-linux-amd64-rpm.bin -x
:~# rpm -ivh --replacepkgs jdk-1_5_0_22-linux-amd64.rpm

<强> 2。重命名安装目录:

:~# mv /usr/java/jdk1.5.0_22 /usr/java/jdk1.5.0_22-bak

第3。使用RPM卸载该版本的JDK:

:~# rpm -e jdk-2000:1.5.0_22-fcs.x86_64

<强> 4。冲洗并重复直至安装所有版本

<强> 5。从目录名称的末尾删除-bak

:~# mv /usr/java/jdk1.5.0_22-bak /usr/java/jdk1.5.0_22

<强> 6。将/usr/java符号链接更改为正确的目标:

:~# ls -la /usr/java
default -> java7
java5 -> jdk1.5.0_22
java6 -> jdk1.6.0_45
java7 -> jdk1.7.0_80
java8 -> jdk1.8.0_101
jdk1.5.0_22
jdk1.6.0_45
jdk1.7.0_80
jdk1.8.0_101
latest -> java8

<强> 7。将/usr/bin符号链接更改为正确的目标:

:~# ls -la /usr/bin/ja*
jar -> /usr/java/default/bin/jar
java -> /usr/java/default/bin/java
javac -> /usr/java/default/bin/javac
javadoc -> /usr/java/default/bin/javadoc
javah -> /usr/java/default/bin/javah
javaws -> /usr/java/default/bin/javaws

答案 1 :(得分:2)

在ubuntu / linux上,您可以使用

切换java版本
  

update-alternatives --config java

但之前,您需要安装该版本。

您可以使用此脚本(./install-java.sh)安装多个JVM

where format = "format time with out seconds ex HH:mm "

将此脚本放在已解压缩JVM的文件夹中,运行:

/opt/install-java.sh

下一步使用: update-alternatives --config java

答案 2 :(得分:0)

替代方法是管理jdks的好方法,但是如果您正在寻找一种简单的方法来管理JDK,Maven,Gradle的多个版本,则可以使用SDKMAN。 例如,要安装JDK,只需输入
sdk install java在您的终端中。
并切换到其他版本,只需输入:
sdk default java version