Maven 环境变量:M2_HOME、MAVEN_HOME 和 PATH

1、概览

Apache Maven 安装的过程中,我们需要配置各种环境变量,以确保 Maven 能正常运行。本文将带你了解与之相关的三个变量:M2_HOMEMAVEN_HOMEPATH

先来看看如何配置最早版本的 Maven。

注意Apache Maven 1.xMaven 2.x 已停止使用。第 2 节和第 3 节展示的配置仅供参考,不提倡使用。

2、Maven 1.x

下载并解压 Maven 压缩文件,进入到解压目录的 bin 文件夹。在这个目录中,你可以尝试执行一下 maven 命令,看看它是否能正常工作:

$ maven -v

该命令输出如下,表示我们缺少一个必需的环境变量:

MAVEN_HOME must be set

MAVEN_HOME 环境变量指定了 Maven 目录(解压后的)的位置,而且该环境变量是必须的。

在系统中添加这个环境变量后,再次运行之前的命令(需要新的终端中运行):

$ maven -v

结果如下:

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

现在,我们可以在系统中使用 Maven 了。

3、Maven 2.x

下载并解压 Mavem,然后进入到 bin 目录并执行版本信息命令:

$ mvn -v

与上一节不同,Maven 2.x 不会提示 MAVEN_HOMEM2_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 环境变量。

4、Maven 3.x

下载并解压缩后,进入 bin 目录。执行如下命令查看 Maven 的版本号:

$ 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,成为用于指定安装位置的变量。

5、对比

各个 Maven 版本及其环境变量之间的差异如下表所示:

Maven 版本 变量名称 必须
1.x MAVEN_HOME
2.x M2_HOME 可选
3.x MAVEN_HOME 可选

6、配置 PATH 变量

如前所述,我们在安装目录的 bin 目录中执行了 Maven 命令。为了能在 bin 目录之外的任意地方运行 Maven 命令,我们需要将其添加到 PATH 环境变量中。

编辑 /etc/profile 配置文件,添加如下内容:

# Maven 安装目录
export MAVEN_HOME=/root/apache-maven-3.9.1
# 把 bin 目录设置到 PATH 环境变量
export PATH=$PATH:$MAVEN_HOME/bin

配置完成后,还需要执行一条命令来使其生效:

source /etc/profile

如上,我们就能够在系统的任何地方运行 maven 命令。

7、总结

本文介绍了 Maven 安装过程中可能会涉及的三个环境变量:M2_HOMEMAVEN_HOMEPATHM2_HOMEMAVEN_HOME 用于指定 Maven 安装目录,具体取决于版本,PATH 变量用于使 maven 命令在任意目录可用。


Ref:https://www.baeldung.com/java-maven-environment-variables