我的工作主要是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
指令的大火。
答案 0 :(得分:5)
显然,Oracle发布的RPM脚本往往会破坏您安装的所有以前的JDK版本,方法是从那些较旧的安装中删除关键JAR文件,例如tools.jar
和rt.jar
。这使得以前运行的JDK对开发人员毫无用处。
我的第一个回应是在运行第二个安装程序脚本之前重命名安装目录。但这样做会让RPM抱怨在运行第二个脚本时已经安装了JDK版本。所以hack的黑客就是安装一个版本,重命名该目录,然后用RPM“删除”该版本(即使它会抱怨无法找到与之关联的任何相应文件)。 然后您可以自由安装第二个版本,为每个版本重复前面的步骤,直到您找到要安装的最新版本。
以下是在同一台计算机上获取多个正在运行的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