有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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捆绑在一起的其他工件(如安全策略fil等)?如果前者是真的,那么我觉得我们可以使用/usrJAVA_HOME,但是如果后者是真的,那么我认为正确使用JAVA_HOME的唯一方法就是牺牲替代功能


共 (2) 个答案

  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 app设置的变量中获取java类路径,然后从中删除bin/java部分,然后将其分配给java_HOME。这个过程发生在登录系统时。如果在会话中间更改java版本,则必须重新加载配置文件。