管理JDK的'替代品'真的比Symlink和$ PATH更好吗?

Bar*_*owe 6 java linux fedora fedora16

我刚刚升级到Fedora 16(来自fedora 12),并且已经读过/被告知通过使用简单的符号链接并将我的$ PATH设置为该符号链接而不是设置不同的JDK,我应该使用替代工具.

我不明白的是,当你似乎必须运行时,替代方案更好地管理你的jdk:alternative --config不仅适用于'java',还包括所有支持工具(javac,javaws,jstack等) .与以下相比,这看起来很悲惨:

(假设$ PATH =/opt/local/java/current/bin:...)

rm /opt/local/java/current
ln -s /path/to/unpacked/jdkX /opt/local/java/current
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

为什么我认为替代方案是在较新版本的Fedora中管理Java工具的正确方法,因为完全切换JDK似乎要麻烦得多?我刚被告知可怜的信息,还是我遗漏了一些关于替代品的重要信息?

(注意:如果替代品在某种程度上明显更好,请随意残酷.我知道我对这个工具一无所知)

Bar*_*owe 4

一般的

如果您知道只需要更换一两个工具(例如:java 和 javac),那么替代方案似乎是最佳选择,因为它是管理应用程序版本的预期方法。

但是,如果您使用的多个开发工具可能需要设置 JAVA_HOME 或 JDK_HOME 值,或者您不知道该工具可能调用哪个 jdk 实用程序,则似乎将您的 jdk 路径导出到 $JAVA_HOME,并且将其添加到 $PATH 之前是一种更简单的方法。这可能不是“正确”的方式,但在 java 版本之间切换更快,并且更透明,因为您知道所有 jdk 实用程序都将指向同一版本。

  1. 将新的 jdk 解压到正常的 java 位置 (/opt/local/java/jdk_1.X_XX)
  2. 符号链接你当前的jdk

    ln -s /opt/local/java/jdk_1.X_XX current
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在 ~/.bash_profile 或 ~/.bashrc 添加

    JAVA_HOME=/opt/local/java/current
    export JAVA_HOME
    JDK_HOME=$JAVA_HOME
    export JDK_HOME
    
    PATH=$JAVA_HOME/bin:$PATH
    export PATH
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在,如果您需要切换 jdks,您只需交换符号链接即可

    rm /opt/local/java/current
    ln -s /opt/local/java/new_jdk_directory current
    
    Run Code Online (Sandbox Code Playgroud)

Ubuntu 特定

看来在 UBUNTU 上这个问题已经通过update-java-alternatives解决了,它将更新给定运行时或开发工具包(JRE/JDK)的所有替代方案。