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

标签 java grails java-home debian-based

在 Windows 中,JAVA_HOME 必须指向 JDK 安装文件夹(以便 JAVA_HOME/bin 包含所有可执行文件,而 JAVA_HOME/libs 包含所有默认 jar 库)。

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

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

  1. 如果我使用:

    JAVA_HOME=/usr
    

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

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

    JAVA_HOME=/usr/share/java
    

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

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

感谢您的帮助, 路易斯

最佳答案

最终对我有用(Grails 现在运行顺利)几乎就像 Steve B. 指出的那样:

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

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

default-java 是指向当前 JVM 的符号链接(symbolic link)。

关于java - 基于 Linux OpenJDK Debian 的发行版的 JAVA_HOME 环境变量的正确目标是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/663658/

相关文章:

java - 想要阻止毫秒增加

java - 线程中的异常 "main"java.lang.IndexOutOfBoundsException : Index: 23, 大小:22

grails - 在运行时将 Gorm 切换到不同的数据源

grails - Grails是否根据域使用不同的本地化消息?

grails - Grails中如何改变joda--time默认的DateTime格式

java - 用于检查 Java 主目录并比较 java 版本的批处理脚本

ubuntu - JAVA_HOME 变量被重置

ubuntu - 运行PIG时出现JAVA_HOME错误

java - 正确输入下一个 Activity 的文本

java - extractClientIp 上的 Ipv4 ClientIp -> akka-http