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

qaxu7uf2  于 2022-11-04  发布在  Unix
关注(0)|答案(4)|浏览(265)

我是CS的超级新手,对UNIX/Bash词汇非常陌生。
我目前正在尝试安装Maven,我犯了一些错误,复制粘贴旧的安装说明(与错误的版本号),现在整个过程是如此混乱。我第一次尝试按照网站上给出的说明,这没有工作,然后我尝试了一些其他的,现在我担心,我留下了一个混乱,按照不同的说明集。
现在,如果我输入mvn -version,我会得到以下结果:
JAVA_HOME环境变量定义不正确。运行此程序需要此环境变量。注意:JAVA_HOME应指向JDK,而不是JRE
最初,我的JAVA_HOME被设置为jdk-install-dir,它仍然给我上面的错误信息。(版本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

guykilcj

guykilcj1#

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

  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的 full path(也就是你解压它的地方)。这或多或少地帮助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中。你需要做些别的事情。
    因此,TL;DR,如果您将JDK安装在/opt/java/jdk-13.0.1中,并将maven解压缩到/opt/maven/apache-maven-3.6.3中,则您的 bear minimum 工作值为:
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中设置maven和Java(这些设置通常只在 * 该IDE* 中有效)。对于初学者来说,这样做通常更容易上手和运行。

hjzp0vay

hjzp0vay2#

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

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

ijxebb2r3#

我在Ubuntu 20上工作,我自己的问题是关于JAVA_HOME变量中的jdk版本,它不是正确的版本。以下是我围绕这个问题的旅行:
首先,JAVA_HOME值是什么?

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

下一个问题/步骤,Java应用程序指向何处?(来源:(第10页)

$ 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
uttx8gqw

uttx8gqw4#

我这样做是为了未来我的BC在StackOverflow中的所有链接后,解决方案是检查C:\Program Files\Maven\apache-maven-3.6.3\bin上的mvn.cmd文件...
line 52上,它设置了JDK,但它没有“/bin“,而我的OpenJDK 15存储了java.exe
这修复了Windows 11上的问题,但它可以作为其他操作系统的一个想法。希望它有帮助!

相关问题