当前位置: 首页 > article >正文

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 安装目录下的配置文件。

  <!-- 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 中果然发现了这段多出来的内容:

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

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

查看了它的注释:

<!--
 | 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.
 |
 |-->

翻译过来就是:

这是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:定义项目的构建、依赖等信息。

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


http://www.kler.cn/a/450324.html

相关文章:

  • 【目标跟踪综述及关键技术】
  • 实现一个简单的哈希表
  • 计算机网络——练习题
  • mapbox基础,加载mapbox官方地图
  • 前端开发 之 12个鼠标交互特效上【附完整源码】
  • vulnhub靶场【WhowWantsToBeKing】之1
  • 矩阵:Input-Output Interpretation of Matrices (中英双语)
  • VMware Workstation虚拟机网络模式
  • 32 - Java 8 函数式接口
  • Light | 单点光场多维信息重构
  • 力扣-数据结构-1【算法学习day.72】
  • 【微信小程序】3|首页搜索框 | 我的咖啡店-综合实训
  • Linux——字符设备驱动控制LED
  • 高性能Web网关:OpenResty 基础讲解
  • 汽车IVI中控开发入门及进阶(46):FFmpeg
  • 常用网络协议
  • STM32高级物联网通信之以太网通讯
  • go语言并发文件备份,自动比对自动重命名(逐行注释)
  • 在【Arduino IDE】中在线下载和离线下载【ESP系列开发板的SDK】
  • Leetcode打卡:吃苹果的最大数目
  • 【直播电商】领域研究的综述(2024)·国内外混合方法分析—推文分析—2024-12-24
  • 电脑不小心删除了msvcr120.dll文件怎么办?“缺失msvcr120.dll文件”要怎么解决?
  • 监控易助力某市水利规划设计研究院信息化运维升级成功案例
  • 【算法day19】回溯:分割与子集问题
  • Qt如何将系统中使用的qDebug、qWarning等输出的信息显示到自定义的界面上或保存到文件中
  • Docker之技术架构【八大架构演进之路】