【问题标题】:Maven insists JAVA_HOME is not defined correctly, unless I run it as sudoMaven 坚持 JAVA_HOME 定义不正确,除非我以 sudo 运行它
【发布时间】:2022-10-15 02:32:54
【问题描述】:

Ubuntu 22.04.1,从 20.04.5 新更新。

当我尝试使用 Maven 构建任何东西时,它会抱怨:

$ mvn -v
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

不过,我可以使用 sudo 获得结果:

$ sudo mvn -v
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 17.0.4, vendor: Private Build, runtime: /usr/lib/jvm/java-17-openjdk-amd64
Default locale: en_GB, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-48-generic", arch: "amd64", family: "unix"

在更新到 Ubuntu 22.04 之前,我可以在上周构建良好;但是,在尝试构建一个新项目时,我的老板说我需要使用 sudo 来构建它,所以我做到了。由于 Java 版本而失败(Maven 坚持尝试使用 Java 8),无论我做什么,它都不会更改为使用 17。直到我完全删除了 Java 8,此时我开始收到 @987654324 @ 问题。

我已经尝试卸载所有 Java 版本以及 Maven 并重新安装。 我的 PATH 和 JAVA_HOME 变量似乎确实返回正确:

$ echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk-amd64
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin:/home/naf/.local/share/JetBrains/Toolbox/scripts:/usr/lib/jvm/java-17-openjdk-amd64/bin

我不想通过构建为 sudo 来搞乱项目,但我不知道该去哪里。

【问题讨论】:

标签: java maven sudo java-home


【解决方案1】:

JAVA_HOME 可能是在你自己的配置文件中设置的,然后被 maven 测试和不喜欢。

当切换到 root 时,maven 不会进行测试,并且可以继续在路径中查找 java。

试运行

unset JAVA_HOME; mvn … 

和你一样。

【讨论】:

    【解决方案2】:

    要正确安装Java 开发工具包(JDK),最好通过系统包管理器安装,并使用系统工具配置活动版本。 在 Ubuntu 中,JDK 包的名称如下:openjdk-xx-jdk,其中 xx 是版本号。此命令为您提供所有可用版本:

    apt-cache search openjdk | grep -E ^openjdk-[0-9]*-jdk
    

    可以同时安装多个版本,用易于工具。

    要检查安装的版本:

    sudo update-java-alternatives --list
    

    设置激活一个:

    sudo update-java-alternatives --set <tag_in_first_column_of_the_list>
    

    如果您正确执行此操作,您将不再有此问题。

    注意两者的区别JREJDK.当您使用 Java(Maven 使用)编程时,您必须使用包含爪哇编译器而不是不包含它的 JRE。

    JAVA_HOME 可以指向两者,因此会出现这种问题。

    要检查 JAVA_HOME 是否指向 JRE 或 JDK,请执行:

    $JAVA_HOME/bin/javac -version
    

    如果它指向一个 JRE(在我们的例子中是一个错误),那么响应将是:

    bash: /bin/javac: No such file or directory
    

    另外,在 Ubuntu 系统上:

    • JRE 包的名称如下:openjdk-xx-jre,不要安装它
      编译目的,安装JDK,它也包含一个JRE。

    • JAVA_HOME根本没有初始化,Maven是动态初始化的, 如果您的环境安装正确。

    【讨论】:

    • 恐怕这没有奏效。我只通过apt-get安装过,更新java版本没有效果。
    • 您的 JAVA_HOME 似乎指向 JRE 而不是 JDK。我编辑了我的答案以澄清这一点。
    【解决方案3】:

    Maven 有一个~/.mavenrc 文件,它自己的JAVA_HOME 定义指向Java 8。似乎这会覆盖系统默认值。我想在使用 sudo 时它会忽略我的主目录中的文件并获取系统默认值。

    【讨论】:

    • 啊!根据我对部分 Maven 脚本本身的引用,这需要进一步研究。你可能会发现$JAVA_HOME/bin/java 给出了一些不可执行的东西
    猜你喜欢
    • 2015-02-03
    • 2020-05-21
    • 2013-03-18
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多