在Windows中,JAVA_HOME必须指向JDK安装文件夹(以便JAVA_HOME/bin包含所有可执行文件和JAVA_HOME/libs所有默认jar库)。
JAVA_HOME
JAVA_HOME/bin
JAVA_HOME/libs
jar
如果我下载了Sun的JDK捆绑软件并将其安装在Linux中,则过程相同。
但是,我需要使用Kubuntu的默认OpenJDK软件包。问题是所有可执行文件都放在中/usr/bin。但是罐子放在里面/usr/share/java。由于它们不在同一个JAVA_HOME文件夹中,因此我在Grails上遇到了麻烦,也许其他期望使用标准Java结构的应用程序也会遇到麻烦。
/usr/bin
/usr/share/java
JAVA_HOME=/usr
想要使用任何Java可执行文件的所有应用程序和脚本都可以使用标准过程call $JAVA_HOME/bin/executable。但是,由于罐子位于不同的位置,因此并不总是可以找到它们(例如:在我要的grails ClassDefNotFound中native2ascii)。
call $JAVA_HOME/bin/executable
ClassDefNotFound
native2ascii
JAVA_HOME=/usr/share/java
在Java可执行文件(没有java,javac等等)都可以找到。
java
javac
那么,JAVA_HOME在基于Debian的Linux 中处理变量的正确方法是什么?
谢谢您的帮助,路易斯
最终对我有用(Grails现在可以正常工作)的工作几乎就像Steve B.指出的那样:
JAVA_HOME=/usr/lib/jvm/default-java
这样,如果用户更改了系统的默认JDK,它JAVA_HOME仍然可以工作。
default-java 是到当前JVM的符号链接。
default-java