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

时间:2012-08-23 06:29:03

标签: java java-home

确定JAVA_HOME的正确路径在 Ubuntu 系统上有点复杂,因为它使用了替代方案。在我的机器上,这是替代方案在到达实际的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_HOME指向的java不一致,如果我更新替代使用另一个java。

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

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

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

2 个答案:

答案 0 :(得分:5)

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

我相信这就是答案:

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

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

答案 1 :(得分:1)

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

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

然后,每当您使用替代方案更改 Java 版本时,都执行 source 以重新加载 JAVA_HOME

source ~/.bashrc 

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