![同一台 Linux 机器上的多个 Java 环境](https://linux22.com/image/1237579/%E5%90%8C%E4%B8%80%E5%8F%B0%20Linux%20%E6%9C%BA%E5%99%A8%E4%B8%8A%E7%9A%84%E5%A4%9A%E4%B8%AA%20Java%20%E7%8E%AF%E5%A2%83.png)
安装多个同时同一台 Linux 机器上的 Java JDK 版本?
我需要 Java5,而我当前的 Ubuntu 9.10 Karmic 已装载 Java6。
我知道我可以为此设置一个虚拟机,但我正在寻找替代方案。
答案1
如果你下载Linux 二进制文件您可以将其安装在您喜欢的任何目录中。然后只需在代码中引用这些库,就可以了。
使用二进制安装程序,它将创建自己命名的子目录(例如在您的示例中为/usr/java/jdk1.5.0_),因此您可以下载任意数量的子目录,并且它们将自行排列在适当命名的子目录中。
主 java 二进制文件位于 /usr/bin 中,因此如果您想将其替换为当您键入“java”时它会访问您的 java 而不是那个 java,您只需将旧的 java 移出 /usr/bin,然后将新的 java 链接到那里。键入后which java
会告诉您系统上的默认 java 是什么。
@jldupont:当我想到并发安装时,我会想到在同一台机器上安装多个版本,我的方法绝对可以满足您的要求。我的生产机器上安装了大约 12 个版本的 Java,用于处理公司尚未更新的旧机器。
然而当您输入“java”时,您只会获得一个版本的 java,因为它位于“/usr/bin”中...您必须输入类似“/usr/java/jdk1.5.1/bin/java”之类的内容才能获得非系统默认的特定 java 二进制文件。
答案2
只需从 oracle 下载并执行 .bin 文件,然后该文件会自行解压到一个文件夹中。将此文件夹(例如jdk1.6.0_32
)移动到 /usr/lib/jvm,然后移动我用来更改 java 版本的脚本setjava
。但是,由于这些export
语句,您需要留在同一个终端中。此外,一些小型 jvm 工具可能未设置,但我想它在大多数情况下应该可以工作。此外,我是一个 shell 新手,所以如果有更好的可能性,请纠正我 :-) 我的代码是:
#!/bin/bash
# shouldnt be used in a loop, else the path may become too long
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo "Not running as root"
exit
fi
case "$1" in
6)
echo "Setting Java version 6"
export PATH=/usr/lib/jvm/jdk1.6.0_32/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_32
sudo rm /usr/bin/java
sudo rm /usr/bin/javac
sudo rm /usr/bin/javadoc
sudo rm /usr/bin/javah
sudo rm /usr/bin/javap
sudo rm /usr/bin/javaws
sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/java /usr/bin/java
sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javac /usr/bin/javac
sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javadoc /usr/bin/javadoc
sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javah /usr/bin/javah
sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javap /usr/bin/javap
sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javaws /usr/bin/javaws
javac -version
java -version
;;
7)
echo "Setting Java version 7"
export PATH=/usr/lib/jvm/java-7-openjdk/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/
sudo rm /usr/bin/java
sudo rm /usr/bin/javac
sudo rm /usr/bin/javadoc
sudo rm /usr/bin/javah
sudo rm /usr/bin/javap
sudo rm /usr/bin/javaws
sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/java /usr/bin/java
sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javac /usr/bin/javac
sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javadoc /usr/bin/javadoc
sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javah /usr/bin/javah
sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javap /usr/bin/javap
sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javaws /usr/bin/javaws
javac -version
java -version
;;
*)
echo "Usage: $0 {6|7}"
esac
exit 0