当前位置: 首页 > 知识库问答 >
问题:

Maven安装问题:JAVA_HOME应该指向JDK而不是JRE?

施文彬
2023-03-14

我对CS非常陌生,对UNIX/Bash词汇非常陌生。

我目前正在尝试安装Maven,我犯了一些错误,复制粘贴了旧的安装说明(版本号不正确),现在整个过程是如此混乱。我首先尝试按照网站上给出的说明进行操作,但没有成功,然后我又尝试了其他几个,现在我担心我会因为遵循不同的说明而陷入混乱。

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

JAVA_HOME环境变量未正确定义 此环境变量是运行此程序 NB: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/allison)中,另一个在/usr/local中?

共有3个答案

朱自明
2023-03-14

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

首先,JAVA_HOME值是多少?

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

下一个问题/步骤,Java app指向哪里?(来源: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
班承德
2023-03-14

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

scream@kafka1:~$ echo $JAVA_HOME
/opt/java/jdk-11.0.5/
scream@kafka1:~$
冀鸿才
2023-03-14

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

  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,那么您需要使用该路径。消息NB:JAVA_HOME应该指向JDK而不是JRE指的是安装maven时的一个常见错误——maven需要JDK,而不是普通的JRE。这个错误非常常见,以至于任何时候JAVA_HOME指向不是JDK的文件夹,它都会打印这个警告(即使有问题的文件夹实际上不是JRE)。
  2. M2_HOME应该设置为maven安装的完整路径(即您解压缩它的位置)。如果出于某种原因需要,这或多或少有助于maven“找到自己”。严格来说,这个不是必需的。(它没有在我的系统上设置,maven对我来说很好用)。这主要是为了方便设置下一个环境变量
  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,如果您在< code >/opt/Java/JDK-13 . 0 . 1 中安装了您的JDK,并将maven解压缩到< code >/opt/maven/Apache-maven-3 . 6 . 3 中,您的bear最小工作值为:

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 将包含一个 GUI,用于在 IDE 中设置专家和 Java(这些设置通常仅在该 IDE 中工作)。对于初学者来说,以这种方式启动和运行通常要容易得多。

 类似资料:
  • 然后卸载OpenJDK并安装Oracle JDK8,现在运行时 JAVA_HOME环境变量定义不正确运行此程序需要此环境变量nb:JAVA_HOME应该指向JDK,而不是JRE 我正在运行Linux Mint 19,我确实遇到了一些与这个问题相关的Stackoverflow问题。大多数与Windows有关,一些与Linux有关。建议运行的Linux

  • 我已经用编辑了服务器上的文件 我已经重新登录,以下是输出的所有路径: 但是当我尝试运行我的spring boot服务器时,它给了我:

  • 您好,感谢您能提供的任何帮助。 最重要的是,我已经重新安装了java和maven,并多次重启了我的计算机和命令行。

  • 尽管我已经将JAVA_HOME配置到了我认为正确的目录中,但在Windows10中我还是得到了下面的错误。我知道有类似的问题,但似乎没有一个明确的解决方案来解决这个Windows10。 错误: 验证CMD中的变量:

  • 我将指向。很好用。之后,解压ant并设置与ant相关的环境变量,在键入后,得到以下错误消息 我搜索了这个论坛。看起来一个解决方案是将Java指向JDK,而不是JRE。我不确定这是否应该是解决办法。换句话说,一般来说,JAVA_HOME应该指向哪一个?JDK还是JRE?

  • 问题内容: 我一直在与一个同事一起解决我刚刚加入的一个新项目遇到的问题。长话短说,Maven无法正确构建我的.war文件。当我向我的同事提供战争档案时,他会遇到与我相同的问题,当他向我提供其已编译的.war文件时,一切都会正常进行。我们俩都在同一个源上工作。因此,我正在尝试正确地安装Maven(与他相同),我们现在都具有相同版本的Maven。但是,我认为maven错误地查看了java_home。