在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 中处理变量的正确方法是什么?
谢谢你的帮助,路易斯
最终对我有用的东西(Grails现在运作顺利)就像史蒂夫B.指出的那样:
JAVA_HOME=/usr/lib/jvm/default-java
这样,如果用户更改系统的默认JDK,JAVA_HOME
仍然有效.
default-java
是当前JVM的符号链接.
如果您使用替代方法来管理多个Java版本,您可以JAVA_HOME
像这样设置基于符号链接的java:
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
标准的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