在使用替代方案的 Linux 系统上JAVA_HOME的正确路径是什么?

2022-09-04 22:24:49

Ubuntu 系统上,确定 正确的路径有点复杂,因为它使用了替代方案。在我的机器上,这就是替代方案在到达实际的java或javac之前创建至少两个级别的间接寻址的方式。JAVA_HOME

usr/bin/javac -> /etc/alternatives/

/etc/alternatives/java -> /usr/lib/jvm/jdk1.7/bin/javac

如果我设置为 ,那么如果我更新替代项以使用另一个 java,则我的系统 java 可能会与 所指向的 java 不一致。JAVA_HOME/usr/lib/jvm/jdk1.7JAVA_HOME

我的问题是,在使用替代方案的系统上,正确的值是什么。我倾向于认为应该将其设置为JAVA_HOMEJAVA_HOME/usr

这样,TOMCAT或任何其他使用它的软件都会将“bin”附加到并找到它需要的所有可执行文件。JAVA_HOME

对于使用备选项的系统,这是否是正确的值。大多数软件是否仅用于查找可执行文件,或者它们是否会使用该值来查找与 JDK 捆绑在一起的其他工件(例如安全策略 fil 等)?如果前者是真的,那么我觉得我们可以使用 for ,但如果后者是真的,那么我认为正确使用的唯一方法是牺牲替代功能。JAVA_HOMEJAVA_HOME/usrJAVA_HOMEJAVA_HOME


答案 1

好问题 - 我在Linux上使用“替代方案”,一切都“正常工作” - 我从来没有真正考虑过它。

我相信这就是答案:

1)“替代”将符号链接设置为您的“真实”Java当前配置为的任何符号链接

2)您需要做的就是将$JAVA_HOME设置为符号链接


答案 2

我没有找到该问题的适当直接解决方案,因此这是我的解决方法,将以下内容添加到bachrc中

javapath=$( readlink --canonicalize /usr/bin/java)
removebin="/bin/java"
removejre="/jre"
javapath2=${javapath/$removebin/}
export JAVA_HOME=${javapath2/$removejre/}

然后做源代码重新加载JAVA_HOME每当你使用替代方案更改java版本时

source ~/.bashrc 

解释:我所做的是从 update-alternatives 应用程序设置的变量中获取 java 类路径,然后从中删除 bin/java 部分,然后将其分配给JAVA_HOME。此过程在登录到系统时发生。如果您在会话过程中更改java版本,则必须重新加载配置文件。


推荐