12

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

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

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

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

我的问题是,JAVA_HOME在使用替代品的系统上,正确的价值是什么。我倾向于认为JAVA_HOME应该设置为/usr

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

JAVA_HOME在使用替代品的系统上,这是正确的值吗?大多数软件是否JAVA_HOME仅用于定位可执行文件,还是会使用该值来定位与 JDK 捆绑在一起的其他工件(例如安全策略文件等)?如果前者是真的,那么我觉得我们可以使用/usrfor JAVA_HOME,但如果后者是真的,那么我认为JAVA_HOME正确使用的唯一方法是牺牲替代功能。

4

2 回答 2

8

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

我相信这是答案:

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

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

于 2012-08-23T06:38:46.777 回答
1

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

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

然后在使用替代方法更改 java 版本时执行源以重新加载 JAVA_HOME

source ~/.bashrc 

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

于 2021-01-08T18:00:19.933 回答