确定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
的唯一方法就是牺牲替代方案功能。
答案 0 :(得分:5)
好问题 - 我在Linux上使用“替代品”,一切都“正常” - 我从来没有真正考虑过它。
我相信这就是答案:
JAVA_HOME=/usr/lib/jvm/default-java
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 版本,则必须重新加载配置文件。