当前位置:  开发笔记 > 编程语言 > 正文

基于Linux OpenJDK Debian的发行版的JAVA_HOME环境变量的正确目标是什么?

如何解决《基于LinuxOpenJDKDebian的发行版的JAVA_HOME环境变量的正确目标是什么?》经验,为你挑选了3个好方法。

在Windows中,JAVA_HOME必须指向JDK安装文件夹(因此JAVA_HOME/bin包含所有可执行文件并JAVA_HOME/libs包含所有默认jar库).

如果我下载Sun的JDK软件包并在Linux中安装它,则程序相同.

但是,我需要使用Kubuntu的默认OpenJDK包.问题是所有可执行文件都放在/usr/bin.但是放入罐子里/usr/share/java.由于它们不在同一个JAVA_HOME文件夹下,我遇到了Grails的问题,并且可能会遇到其他需要标准Java结构的应用程序.

    如果我使用:

    JAVA_HOME=/usr
    

    所有想要使用任何Java可执行文件的应用程序和脚本都可以使用标准过程call $JAVA_HOME/bin/executable.然而,由于罐子在不同的地方,它们并不总是被发现(例如:我正在ClassDefNotFound寻找的grails native2ascii).

    另一方面,如果我使用:

    JAVA_HOME=/usr/share/java
    

    在Java可执行文件(没有java,javac等等)都可以找到.

那么,JAVA_HOME在基于Debian的Linux 中处理变量的正确方法是什么?

谢谢你的帮助,路易斯



1> Luis Soeiro..:

最终对我有用的东西(Grails现在运作顺利)就像史蒂夫B.指出的那样:

JAVA_HOME=/usr/lib/jvm/default-java

这样,如果用户更改系统的默认JDK,JAVA_HOME仍然有效.

default-java 是当前JVM的符号链接.


似乎Debian 7上没有这样的链接
在RHEL5.10上,它是/ usr/lib/jvm/java

2> bbaassssiiee..:

如果您使用替代方法来管理多个Java版本,您可以JAVA_HOME像这样设置基于符号链接的java:

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


出色的解决方案,解决了我多年来对JAVA_HOME长期头疼的问题,它往往指向不同操作系统上的不同位置.
这对我有用:JAVA_HOME = $(readlink -f/usr/bin/java | sed"s:/ jre/bin/java ::")
请注意,这个聪明的解决方案不适用于Gentoo这样的发行版,它们的`/ usr/bin/java`指向一个脚本(`/ usr/libexec/eselect-java/run-java-tool.bash`).不过,这是一个很好的方法.我唯一要改变的是使用Bash的内置替换来避免产生`sed`,例如:`JAVA_HOME = $(j = $(readlink -f/usr/bin/java); echo $ {j %%/bin/java})`

3> Steve B...:

标准的Ubuntu安装似乎将各种Java版本放入其中/usr/lib/jvm.的javac,Java中,你发现在你的路径软链接到这一点.

在任何您喜欢的地方安装自己的Java版本都没有问题,只要您设置JAVA_HOME环境变量并确保bin在您的路径上安装新的Java .

一个简单的方法是让Java home作为软链接存在,这样如果你想升级或切换版本,你只需要更改它指向的目录 - 例如:

/usr/bin/java --> /opt/jdk/bin/java,

/opt/jdk --> /opt/jdk1.6.011


注意请求者说他使用了Kubuntu,因此Ubuntu解决方案应该没问题.
推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有