【发布时间】:2012-08-18 15:10:10
【问题描述】:
在 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_HOME 指向的 java 不一致,如果我更新替代项以使用另一个 java。
我的问题是,在使用替代方案的系统上,JAVA_HOME 的正确值是多少。我倾向于认为JAVA_HOME应该设置为/usr
这样 TOMCAT 或任何其他使用它的软件都会将“bin”附加到JAVA_HOME 并找到它需要的所有可执行文件。
这是JAVA_HOME 在使用替代品的系统上的正确值吗?大多数软件是否仅使用JAVA_HOME 来定位可执行文件,还是会使用该值来定位与 JDK 捆绑在一起的其他工件(例如安全策略文件等)?如果前者是真的,那么我觉得我们可以将/usr 用于JAVA_HOME,但如果后者是真的,那么我认为正确使用JAVA_HOME 的唯一方法是牺牲替代功能。
【问题讨论】:
-
我刚刚查看了我的 CentOS 5.5 系统:1) 我确实没有在我的环境中的任何地方定义了 $JAVA_HOME,2) /etc/tomcat5/tomcat5.conf 有这个行:
JAVA_HOME="/usr/lib/jvm/java",3) /usr/lib/jvm/java 是一个符号链接:java -> /etc/alternatives/java_sdk,4) /etc/alternatives/java_sdk 也是一个符号链接:java_sdk -> /usr/lib/jvm/java-1.4.2-gcj。 -
是的,我在 Ubuntu 上有 'default-java' 而不是 /usr/lib/jvm 里面的 'java' 所以,我想诀窍是根本不用担心替代方案,因为还有一个替代品和 Java 之间的层。