【问题标题】:Maven installation issues: JAVA_HOME should point to a JDK not JRE?Maven安装问题:JAVA_HOME应该指向JDK而不是JRE?
【发布时间】:2020-04-30 02:31:26
【问题描述】:

我是 CS 超级新手,对 UNIX/Bash 词汇非常不熟悉。

我目前正在尝试安装 Maven,我通过复制粘贴旧的安装说明(版本号不正确)犯了一些错误,现在整个过程非常混乱。我首先尝试按照网站上给定的说明进行操作,但没有成功,然后我尝试了其他一些方法,现在我担心按照不同的说明进行操作会造成混乱。

我现在已经达到了一个点,如果我输入mvn -version,我会得到以下信息:

JAVA_HOME 环境变量定义不正确 运行这个程序需要这个环境变量 注意:JAVA_HOME 应该指向 JDK 而不是 JRE

最初,我的 JAVA_HOME 设置为 jdk-install-dir,它仍然给了我上述错误消息。我尝试从 Oracle 重新下载 jdk(版本 13.0.1),将该文件拖到我的主目录,然后解压缩。然后我将我的 JAVA_HOME 设置为那个解压缩的文件 jdk-13.0.1.jdk,并更新了我的 PATH 变量。毕竟,我仍然收到同样的错误消息,我不知道该怎么办。

作为参考,以下是一些相关环境变量的设置(我没有包含来自 PATH 的不相关信息):

~ echo $JAVA_HOME
jdk-13.0.1.jdk
~ echo $PATH
/usr/local/apache-maven/apache-maven-3.6.3/bin:/opt/apache-maven-3.6.3/bin:jdk-install-dir/bin:/usr/local/apache-maven/apache-maven-3.3.9/bin:/opt/apache-maven-3.6.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/allyson/apache-maven-3.6.3/bin:/Users/allyson/apache-maven-3.6.3/bin:jdk-12.0.1.jdk/bin:/Users/allyson/apache-maven-3.6.3/bin:JDK-13.0.1.jdk/bin 
~ echo $M2
/usr/local/apache-maven/apache-maven-3.6.3/bin
~ echo $M2_HOME
/Users/allyson/apache-maven-3.6.3

我很好奇的一件事:对于 M2 和 M2_HOME 变量,是否应该是我的主目录中的一个 (/Users/allyson) 而一个是 /usr/local

【问题讨论】:

    标签: java maven unix installation


    【解决方案1】:

    好的,深呼吸,我们将逐步完成。这些环境变量中的每一个都有一个目的,一旦你了解了这些目的是什么,这就更有意义了。混合教程不一定是个问题,但您会想了解自己在做什么,而不是盲目地从互联网上复制值。

    1. JAVA_HOME 旨在向系统环境标识在哪里可以找到 java 运行时环境。它需要设置为您的 JDK 安装位置的完整路径。在 Windows 上,这可能是 C:\Program Files\Java\jdk-13.0.1。在 Linux 系统上,您有更多的灵活性。常见位置可能是 /opt/java/jdk-13.0.1/usr/local/java/jdk-13.0.1。如果您将 JDK 安装在其他地方,则需要使用 that 路径。消息NB: JAVA_HOME should point to a JDK not a JRE 指的是安装maven 时的一个常见错误——maven 需要JDK,而不是普通的JRE。这个错误很常见,以至于任何时候JAVA_HOME 指向一个不是 JDK 的文件夹,它都会打印这个警告(即使有问题的文件夹 实际上不是 JRE)。李>
    2. M2_HOME 应该设置为安装 maven 的 完整路径(即解压缩它的位置)。如果出于任何原因需要,这或多或少有助于 maven “找到自己”。严格来说,这个是没有必要的。 (它没有在我的系统上设置,maven 对我来说很好)。这主要是为了方便设置 next 环境变量。
    3. M2 是 maven 可执行文件所在文件夹的完整路径。这几乎总是$M2_HOME/bin,但肯定有可能做一些奇怪的事情,这会让你解决这些情况。显然,如果您没有指定$M2_HOME,这将不起作用。这也不是绝对必要的,而且主要是设置下一个的便捷方式。
    4. PATH 是您的 Linux 系统在您在命令行中键入名称时查找要运行的程序的位置。为了便于使用,您需要确保 maven 和 java 可执行文件包含在 : 分隔列表中的某个位置。大多数 Linux 发行版已经在某种 shell 资源文件中为您设置了默认的PATH。您需要参考他们的文档以了解如何将另一个条目添加到路径中,但常见的习惯用法是 PATH=$PATH:$M2(它将 $M2 的值附加到 $PATH 的值,然后存储结果回到PATH。如果您没有设置$M2$M2_HOME,则需要执行其他操作。

    所以,TL;DR,如果您将 JDK 安装在 /opt/java/jdk-13.0.1 并将 maven 解压缩到 /opt/maven/apache-maven-3.6.3,您的最小承受力工作值是:

    export JAVA_HOME=/opt/java/jdk-13.0.1
    export PATH=$PATH:$JAVA_HOME/bin:/opt/maven/apache-maven-3.6.3/bin
    

    如果你想要一整套

    export JAVA_HOME=/opt/java/jdk-13.0.1
    export M2_HOME=/opt/maven/apache-maven-3.6.3
    export M2=$M2_HOME/bin
    export PATH=$PATH:$JAVA_HOME/bin:$M2
    

    值得注意的是,大多数 Java IDE 都包含一个用于在 IDE 中设置 maven 和 Java 的 GUI(这些设置通常只在该 IDE 中工作)。对于初学者来说,以这种方式启动和运行通常要容易得多。

    【讨论】:

      【解决方案2】:

      $JAVA_HOME 应该是完整路径,而不是目录名。

      scream@kafka1:~$ echo $JAVA_HOME
      /opt/java/jdk-11.0.5/
      scream@kafka1:~$
      

      【讨论】:

        【解决方案3】:

        我正在使用 Ubuntu 20,我自己的问题是关于 JAVA_HOME 变量中的 jdk 版本,它不是正确的版本。这是我围绕这个问题的旅程:

        首先,JAVA_HOME 的值是多少?

        $ echo $JAVA_HOME
        $ /usr/lib/jvm/jdk-11.0.10
        

        下一个问题/步骤,Java 应用程序指向哪里? (来源:https://stackoverflow.com/a/42706056/2373421

        $ java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home'
        java.home = /usr/lib/jvm/jdk-11.0.12
        

        所以,JAVA_HOME 变量没有保持正确的值。让我们改变它:

        $ export JAVA_HOME=/usr/lib/jvm/jdk-11.0.12
        

        测试结果就是现在:

        $ mvn -v
        Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
        Maven home: /opt/apache-maven-3.8.1
        Java version: 11.0.12, vendor: Oracle Corporation, runtime: /usr/lib/jvm/jdk-11.0.12
        

        【讨论】:

          猜你喜欢
          • 2019-04-19
          • 2017-09-15
          • 2013-07-10
          • 2019-02-27
          • 2021-09-15
          • 2018-11-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多