同一台 Linux 机器上的多个 Java 环境

同一台 Linux 机器上的多个 Java 环境

安装多个同时同一台 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

相关内容