Maven 环境变量 MAVEN_HOME 和 M2_HOME 区别以及 IDEA 修改 Maven repository 路径全局

最近 Java 学到 Maven,在修改 repository 路径(保护C盘空间)的问题上遇到了阻塞, 所幸终于搞清楚了,在此记录一下。

手动安装 MAVEN

首先自己尝试手动安装了一下Maven,就是官网下载,解包,配置环境变量,手动修改 conf/settings.xml 下的配置文件(改 <localRepository>),一切顺利。

过程中发现有的每个人说的配置Maven安装目录的环境变量名不一样,包括 MAVEN_HOMEM2_HOME,网上的说法五花八门,相同点是它们都指向 Maven 的安装目录,不同点:

  • 有说操作系统不同:MAVEN_HOME 主要是Linux和macOS在用,M2_HOME主要是windows在用。
  • 有说是Maven版本不同:
    • Maven 1.x 使用 MAVEN_HOME
    • Maven 2.x 引入 M2_HOME,在 Maven 2 及更高版本使用;MAVEN_HOME 也可以使用
    • Maven 3.x 推荐使用 M2_HOME;MAVEN_HOME 不再推荐使用
    • 基于这个说法,为了兼容性,推荐把这两个环境变量都配上
  • 有说是每个工具识别 Maven 安装目录所用的环境变量不同:例如我安装的 IDEA 版本,对这两个都识别

我最终的做法是最少配置原则 ,所以这两个环境变量我都没有配置,仅在PATH中添加了 Maven 安装目录下的 bin 路径,以保证我可以使用 mvn 命令行工具就行,这样在学习过程中才好暴露出可能的问题。

IDEA 指定 Maven

后来想到自己之前练习 Java,安装的 IDEA(2023)是如何指定 Maven 的,打开 File -> settings 搜索发现,IDEA 本身就内置了 Maven,并且也支持手动指定自己安装的Maven路径:

  • Bundle (Maven 3) :是 IntelliJ IDEA 自带的 Maven 版本。当你选择这个选项时,IDEA 将使用其内置的 Maven 版本来执行 Maven 相关的任务,而不需要你在你的计算机上单独安装 Maven。这个内置的 Maven 版本通常是 Maven 3.x 版本。使用内置的 Maven 版本可以确保 IDEA 与 Maven 的兼容性,并且不需要额外的配置。安装路径是 IDEA安装目录\plugins\maven\lib\maven3
  • Use Maven wrapper :是一个 Maven 提供的工具,它允许项目在不要求用户全局安装 Maven 的情况下运行 Maven 命令。当你选择这个选项时,IDEA 将使用项目中的 Maven wrapper 来执行 Maven 任务。Maven wrapper 通常包含在项目的 .mvn 目录中,它会自动下载并使用与项目 pom.xml 文件中指定的 Maven 版本相匹配的 Maven 版本。这样做的好处是,不同的项目可以独立地使用不同版本的 Maven,而不会相互冲突。
  • 本地路径:如果安装过其他 Maven(IDEA会自动识别排除内置的Maven),并配置了安装目录的环境变量(MAVEN_HOME 或 M2_HOME),就会出现第三个选项,显示的就是Maven 的安装路径

所以为了方便,我将之前安装的 Maven 删掉,PATH 环境变量重新配置为 IDEA 内置 Maven 的地址。

IDEA 修改 repository 路径

因为 Maven 可以管理依赖包,那就需要考虑依赖安装的问题,考虑到 C 盘压力很大,我就想修改依赖存储的路径。

在手动安装 Maven 过程中修改配置文件 conf/settings.xml 就行,在 IDEA 是怎样的呢,于是搜索之后也是五花八门,最终选择了和手动安装 Maven 一样的方式,修改 IEDA 内置 Maven 安装目录下的配置文件。

xml 复制代码
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

<localRepository>/path/to/local/repo</localRepository> 的注释放开,将 /path/to/local/repo 改成自己的地址就行。

再说下遇到的问题

一开始偷懒在网上搜的方法产生了一些问题,该方法让我直接修改 File -> Settings 中的配置:

修改 Local repository 并勾选 Override 即可。

修改后发现,它仅对当前项目生效,这个现象立马让我想到了用户配置和工作区配置。而上面的 User settings file 明显是用户配置,我查看了下,本地也并没有这个文件(因为我也没配过)。

那只能是工作区配置了,在 .idea/workspace.xml 中果然发现了这段多出来的内容:

xml 复制代码
  <component name="MavenImportPreferences">
    <option name="generalSettings">
      <MavenGeneralSettings>
        <option name="localRepository" value="E:\software\idea-maven\.m2\repository" />
      </MavenGeneralSettings>
    </option>
  </component>

想来还是用传统的办法比较靠谱,所以直接去修改 Maven 安装目录下的配置文件。

查看了它的注释:

xml 复制代码
<!--
 | This is the configuration file for Maven. It can be specified at two levels:
 |
 |  1. User Level. This settings.xml file provides configuration for a single user,
 |                 and is normally provided in ${user.home}/.m2/settings.xml.
 |
 |                 NOTE: This location can be overridden with the CLI option:
 |
 |                 -s /path/to/user/settings.xml
 |
 |  2. Global Level. This settings.xml file provides configuration for all Maven
 |                 users on a machine (assuming they're all using the same Maven
 |                 installation). It's normally provided in
 |                 ${maven.conf}/settings.xml.
 |
 |                 NOTE: This location can be overridden with the CLI option:
 |
 |                 -gs /path/to/global/settings.xml
 |
 | The sections in this sample file are intended to give you a running start at
 | getting the most out of your Maven installation. Where appropriate, the default
 | values (values used when the setting is not specified) are provided.
 |
 |-->

翻译过来就是:

xml 复制代码
这是Maven的配置文件。它可以在两个级别上指定:

1.用户级别: 此 settings.xml 文件为单个用户提供配置,通常在 ${user.home}/.m2/settings.xml 中提供。
注意:此位置可以用 CLI 选项覆盖:
-s/path/to/user/settings.xml

2.全局层面: 此 settings.xml 文件为机器上的所有 Maven 用户提供配置(假设他们都使用相同的 Maven 安装)。它通常在 ${maven.conf}/settings.xml 中提供。
注意:此位置可以用 CLI 选项覆盖:
-gs/path/to/global/settings.xml

这个示例文件中的部分旨在给你一个运行的初始配置,让你最大限度地利用你的 Maven 安装。在适当的地方,提供了默认值(当设置未指定时使用的值)。

所以它果然是全局配置文件 。修改后,重启 IDEA,Local repository 自动变成了全局配置的路径。

又查了下IDEA在使用配置的优先级:

  • 命令行参数:直接在命令行中指定的参数,具有最高的优先级。
  • .mvn/maven.config:项目特定的 Maven 配置,可以覆盖用户和全局设置。想来与那个 Use Maven wrapperUse settings from .mvn/maven.config 有关。
  • .idea/workspace.xml:IDEA 特定的工作区设置。
  • 用户级别的 settings.xml:位于用户主目录下的 .m2 文件夹中,包含用户专属的 Maven 配置。
  • 全局 settings.xml:位于 Maven 安装目录下的 conf 文件夹中,包含全局的 Maven 配置。
  • 项目 pom.xml:定义项目的构建、依赖等信息。

其他好像还有环境变量,不过我目前用不到,就不过多研究了。

相关推荐
小_太_阳13 分钟前
Scala_【2】变量和数据类型
开发语言·后端·scala·intellij-idea
黑胡子大叔的小屋34 分钟前
基于springboot的海洋知识服务平台的设计与实现
java·spring boot·毕业设计
ThisIsClark37 分钟前
【后端面试总结】深入解析进程和线程的区别
java·jvm·面试
雷神乐乐1 小时前
Spring学习(一)——Sping-XML
java·学习·spring
小林coding2 小时前
阿里云 Java 后端一面,什么难度?
java·后端·mysql·spring·阿里云
V+zmm101342 小时前
基于小程序宿舍报修系统的设计与实现ssm+论文源码调试讲解
java·小程序·毕业设计·mvc·ssm
文大。2 小时前
2024年广西职工职业技能大赛-Spring
java·spring·网络安全
一只小小翠3 小时前
EasyExcel 模板+公式填充
java·easyexcel
m0_748256343 小时前
QWebChannel实现与JS的交互
java·javascript·交互
Jelena技术达人4 小时前
Java爬虫获取1688关键字 item_search接口返回值详细解析
java·开发语言·爬虫