如何确定Debian / Ubuntu上的JAVA_HOME?

在Ubuntu上,可以同时拥有多个JVM。 默认的一个是使用update-alternatives 。 但是由于debian策略 ,这不会设置JAVA_HOME环境variables。

我正在写一个启动脚本(bash),它启动一个Java应用程序。 这个Java应用程序需要JAVA_HOME环境variables。 那么如何获得当前由update-alternatives选中的JVM的path呢?

    对于JRE,这样的事情应该可以做到:

     JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::") 

    可以很容易地采用danadam的解决scheme来根据需要检索JDK(即不是JRE)path:

     JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::") 
    • 寻找包含在JDK(而不是JRE)中的javac Java编译器(而不是java)。
    • 没有尾随/(被sed s:/ bin …取代,而不是s:bin …)

    export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

    .bashrc对我来说很方便。

    那么,你说这个命令对你什么都不做?

     sudo update-alternatives --config java 

    我用java安装了

     sudo apt-get install openjdk-7-jre-headless 

    然后find位置

     ls -al /etc/alternatives/java 

    作为danadams的延伸回答:

    首先,安装第二个Java JRE作为第三个Java选项,优先级为“3”:

     sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3 

    那么,你可以列出他们:

     update-alternatives --list java 

    你可以手动设置替代,使用这个:

     sudo alternatives --config java /opt/IBM/java/jre/bin/java 

    然后,你的脚本可以设置它,如下所示:

     sudo alternatives --set java /opt/IBM/java/jre/bin/java JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::") 

    这更好地说明了'sed'命令在做什么。 尽pipe您仍然需要为javaw和javac等设置链接,但每个链接都要单独完成。

    前一段时间,我在Ubuntu论坛上创build了一个关于如何从Java网站安装最新的JRE / JDK的教程。 还介绍如何通过将JRE / JDK位置添加到PATHvariables来启用系统范围。 如果你喜欢,也可以在主题末尾提到的脚本中添加JAVA_HOME。

    检查出来: http : //ubuntuforums.org/showthread.php?t=1437100