【问题标题】:How does maven know JAVA_HOME set as an environment variable inUbuntumaven 如何知道 JAVA_HOME 在 Ubuntu 中设置为环境变量
【发布时间】:2015-09-21 04:58:19
【问题描述】:

当我从终端(ubuntu)在 ubuntu 中键入 mvn --version 时,我得到以下输出。

Warning: JAVA_HOME environment variable is not set.
Apache Maven 3.0.5
Maven home: /usr/share/maven
Java version: 1.7.0_79, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: en_IN, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-32-generic", arch: "amd64", family:     "unix"

当我没有设置任何 JAVA_HOME 环境变量时,maven 是如何获取 java home 安装路径的。它是否试图从我系统中安装的 /usr/bin/java 命令中找到此路径,如果是,为什么一直到 jre 为止。

P.S : 另外我在任何 maven 配置中都找不到任何 java 路径。

谢谢。

【问题讨论】:

    标签: java maven environment-variables ubuntu-14.04


    【解决方案1】:

    CLIReportingUtils.java(检索 Java Home 的 maven 类)中所示,该值来自以下调用:

    System.getProperty( "java.home", "<unknown java home>" )
    

    java.home 用于 JRE,而 JAVA_HOME 用于 JDK。 所以 Maven 正在显示 JRE 主页。

    【讨论】:

    • 我的问题是,当我没有设置任何 java 路径时,maven 怎么会选择一些 java 路径作为 JAVA_HOME。这是针对 ubuntu 的。
    • 系统属性仅适用于 Java。您没有在操作系统上设置它。您可以在运行命令时设置它(-DpropertyName):stackoverflow.com/a/7054981/644669
    • 好的。知道了。但是哪个java进程正在设置这个系统属性,它是如何获得这个路径的?
    • grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/… 然后,转到 java 本机实现(在 c 中)。 java.home 在安装时由操作系统与 Java 通信。
    【解决方案2】:

    我想说JAVA_HOME 环境变量和输出Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre 之间存在差异。 后者只是安装目录see here的输出。

    所以 maven 会在后台运行 Java,而 java 知道它的安装位置。

    【讨论】:

    • 是的。我的意思是 maven 将这个 java 位置视为自己的 JAVA_HOME,因此它打印在 mvn --version 中。
    • 正如@Zakaria 发布的那样,Maven 只读取java.home 属性,默认情况下是安装目录。 System.out.println(System.getProperty("java.home"))永远是安装目录,System.out.println(System.getenv("JAVA_HOME"))是环境变量的值
    • 谢谢你。在选择你的答案和 zakaria 时感到困惑。刚刚与 zakaria 一起获取源代码链接。
    【解决方案3】:

    我想,我现在明白了。在 maven 脚本(即(usr/share/maven/bin/mvn)中,他们试图找到使用各种选项安装的 java。

    所以他们在一个地方做以下事情

    JAVACMD="`which java`"
    

    现在在我的系统中“哪个java”指向下面

    java -> /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
    

    希望这是获取 java 路径的方式。

    【讨论】:

    • 抱歉坚持,但正如我在回答中指出的那样,您可以在 maven 源代码中看到 maven 命令正在调用以下指令:System.getProperty( "java.home", "&lt;unknown java home&gt;" )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2021-09-16
    相关资源
    最近更新 更多