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

2022-08-31 11:01:37

在 Windows 中,必须指向 JDK 安装文件夹(以便包含所有可执行文件并包含所有默认库)。JAVA_HOMEJAVA_HOME/binJAVA_HOME/libsjar

如果我下载Sun的JDK捆绑包并将其安装在Linux中,则过程相同。

但是,我需要使用Kubuntu的默认OpenJDK包。问题是所有可执行文件都放在 中。但是罐子被放在.由于它们不在同一文件夹下,我在使用Grails时遇到问题,并且可能在其他期望标准Java结构的应用程序上遇到麻烦。/usr/bin/usr/share/javaJAVA_HOME

  1. 如果我使用:

    JAVA_HOME=/usr
    

    所有想要使用任何 Java 可执行文件的应用程序和脚本都可以使用标准过程。但是,由于罐子位于不同的地方,因此并不总是找到它们(例如:在圣杯中,我得到了)。call $JAVA_HOME/bin/executableClassDefNotFoundnative2ascii

  2. 另一方面,如果我使用:

    JAVA_HOME=/usr/share/java
    

    找不到任何 Java 可执行文件 (、 等)。javajavac

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

谢谢你的帮助,路易斯


答案 1

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

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

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

default-java是指向当前 JVM 的符号链接。


答案 2

如果您使用替代方案来管理多个java版本,则可以基于符号链接的java(或javac)设置,如下所示:JAVA_HOME

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

推荐