M2_HOME、MAVEN_HOME 和使用 PATH 变量之间的区别

作为Apache Maven 安装过程的一部分,我们需要配置各种环境变量以确保我们的 Maven 安装顺利进行。在本教程中,我们将介绍其中三个变量:M2_HOME、MAVEN_HOME和PATH。我们将了解它们如何影响我们的安装,具体取决于我们使用的 Maven 版本。

让我们首先看看如何配置 Maven 的最早版本。

注意:Apache Maven 1.x 和 Maven 2.x 已达到使用寿命。第 2 节和第 3 节仅出于说明目的演示了配置,并不提倡使用它们。

Maven 1.x
验证并提取现成的二进制分发 Maven 存档后,让我们导航到 Maven 目录的bin文件夹。从这里,我们可以运行 maven 命令来查看它是否开箱即用:

$ maven -v
此命令将产生一个输出,表明我们缺少所需的环境变量:

MAVEN_HOME must be set

这里,Maven 告诉我们MAVEN_HOME环境变量不仅指示Maven 目录的解压位置,而且它也是一个强制变量。

将此环境变量添加到我们的系统后,让我们运行前面的命令:

$ maven -v

我们将得到这个结果:

   
|  \/  | _Apache _
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\
,_|\_/\___|_||_|  v. 1.1

这表明我们的系统将与下载的 Maven 版本一起工作。

接下来,让我们考虑一下这个变量的用法在Maven 2.x中是如何变化的。

Maven 2.x
验证并提取下载的 Maven 二进制文件后,让我们导航到bin目录并运行版本信息命令:

$ mvn -v
与上一节不同,Maven 2.x 不会抱怨MAVEN_HOME或M2_HOME变量未设置,因为版本 2 使此变量成为可选的。该命令给出类似于下面的输出:

Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
Java version: 1.8.0_412
Java home: /home/.sdkman/candidates/java/8.0.412.fx-librca/jre
Default locale: en, platform encoding: UTF-8
OS name: "linux"

在 Maven 2.x 中,MAVEN_HOME变量被重命名为M2_HOME。这意味着要指定 Maven 2.x 的安装位置,我们需要设置M2_HOME环境变量。

接下来我们看一下Maven的最新版本。

Maven 3.x
验证并提取二进制文件后,让我们导航到bin目录并再次查询版本信息:

$ mvn -v
该命令提供类似下面的输出:

Apache Maven 3.9.8 (36645f6c9b5079805ea5009217e36f2cffd34256)
Maven home: /home/dev-tools/apache-maven-3.9.8
Java version: 1.8.0_412, vendor: BellSoft, 
    runtime: /home/.sdkman/candidates/java/8.0.412.fx-librca/jre
Default locale: en, platform encoding: UTF-8
OS name: "linux"

与版本 2 类似,Maven 3.x 将MAVEN_HOME变量设为可选。在 Maven 3.x 中,MAVEN_HOME取代了M2_HOME作为用于指定安装位置的变量。

比较总结
让我们以表格形式总结一下我们所讨论的内容:

Maven 版本    变量名    是否必需
1.x    MAVEN_HOME    必须
2.x    M2_HOME    选
3.x    MAVEN_HOME    选

设置PATH变量
在前面的部分中,我们从安装的 bin 目录中执行了 Maven 命令。为了使我们能够从bin目录之外运行 Maven 命令,我们需要将其添加到我们的PATH环境变量中。Maven安装教程展示了如何针对不同的操作系统执行此操作:Windows、Linux和macOS。

因此,我们应该能够从系统中的任何地方运行 Maven 命令。