一篇明白:Maven 的 settings.xml 配置

一篇明白:Maven 的 settings.xml 配置

综述

我们使用Maven有各种不同的具体形式,如:

  • 直接在命令行终端使用Maven
    • Windows的cmd、powershell命令行;
    • MacOS的Terminal终端或者其他第三方的命令行终端;
    • 也包括Linux中使用命令行
  • IDE工具,如IDEA 里使用,其中又可以细分为
    • 直接图形化操作 (附录里会详细讲这几种是什么意思)
    • 图形化操作定义自己的命令
    • 在 IDEA 中的 Terminal 中使用mvn

无论哪种形式,Maven最终生效的配置都是由 全局配置用户配置 合成的(用户配置 在本文也称为局部配置)。

合并全局和局部配置的规则是:存在冲突的,局部配置覆盖全局配置,不存在冲突的两者兼而有之。全局配置或局部配置的文件都可以不存在,甚至两者都可以不存在。两者都不存在的时候,有个默认配置,仓库位置在 ~/.m2/repository,除此外没有任何其他配。

注:不同的使用Maven的方式,对于全局配置和局部配置的解释是不同的,下文会提到

详解

1、命令行中使用 Maven

在命令行中使用 mvn 命令,如 mvn clean package,全局配置和局部配置分别是指

  • 全局配置文件在 $M2_HOME/conf/settings.xml (文件名就必须是 settings.xml 而不能是其他)

  • 用户配置文件在 ~/.m2/settings.xml (文件名就必须是 settings.xml 而不能是其他)

如果全局配置文件不存在,则使用局部的,如果局部配置文件不存在,则使用全局的,如果两个配置文件都不存在也是有一个默认配置的,这个配置非常简单:仓库位置在 ~/.m2/repository,除此外没有任何其他配。详细的内容可以参

思考:如果配置了$M2_HOME,使用的全局配置是依据这个环境变量来的,如果没有配置该环境变量,那全局配置在哪个地方? 我没试验过,下面是我的猜测:不配置该环境变量,应该是依据 mvn 这个命令文件的位置来的,比如 …/conf/settings.xml(mvn在bin/里,在上一层的conf/目录下)

2、IDEA 中使用Maven

在 IDEA 中使用Maven,通常有3种形式

  1. 直接图形化操作
  2. 图形化操作定义自己的命令
  3. 在 IDEA 中的 Terminal 中使用mvn
对于3

其中3和直接在 “操作系统的命令行工具执行Maven” 的一样的,其全局和局部配置也在那两个位置。

对于1和2

对于1、2是一样的,全局配置和局部配置都决定于配置(Preferences->Budid,Execution,Deployment->Build Tools->Maven),如图

在这里插入图片描述

思考:如果我不配置 Maven home directory,那全局配置是什么? 答:不配有IDEA默认内置的maven,里面就有conf/settings.xml。那如果我不配置 User settings file 呢? 答:那应该就不存在用户配置,不存在也是可以的,不是必须配置的。


附录

1、如何查看当前生效的是什么settings?

mvn help:effective-settings

注意结果并不是列出某某路径下的settings.xml正在生效,而仅仅列出所生效的settings配置的内容。这个内容也不是读取settings.xml原样输出(会丢弃你的注释信息)。其实输出的内容就是maven读取全局和局部的配置,合并结果,地到一颗配置树,输出的内容就是这颗配置树。

注:执行这个命令是需要下载依赖jar的。

2、没有全局配置&用户配置

若不存在全局配置文件,也不存在用户配置文件,执行 mvn help:effective-settings,可以看到路径是/Users/stonewang/.m2/repository,即 ~/.m2/repository

Stone-MacBookPro15:docker-hello stonewang$ mvn help:effective-settings
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------< com.wyf.test:docker-hello >----------------------
[INFO] Building docker-hello 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-help-plugin:3.2.0:effective-settings (default-cli) @ docker-hello ---
[INFO] 
Effective user-specific configuration settings:

<?xml version="1.0" encoding="UTF-8"?>
<!-- ====================================================================== -->
<!--                                                                        -->
<!-- Generated by Maven Help Plugin on 2020-09-01T17:47:22+08:00            -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/                -->
<!--                                                                        -->
<!-- ====================================================================== -->
<!-- ====================================================================== -->
<!--                                                                        -->
<!-- Effective Settings for 'stonewang' on 'Stone-MacBookPro15.local'       -->
<!--                                                                        -->
<!-- ====================================================================== -->
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
  <localRepository>/Users/stonewang/.m2/repository</localRepository>
  <pluginGroups>
    <pluginGroup>org.apache.maven.plugins</pluginGroup>
    <pluginGroup>org.codehaus.mojo</pluginGroup>
  </pluginGroups>
</settings>


[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.897 s
[INFO] Finished at: 2020-09-01T17:47:27+08:00
[INFO] ------------------------------------------------------------------------
3、查看日志
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.36/tomcat-embed-websocket-9.0.36.pom (0 B at 0 B/s)

这里这个Downloaded from central 中的 central 是指中央仓库,如果配置了阿里的镜像,这个词会换成对应的id,如 alimaven。另外 0 B at 0 B/s 估计就是已经下载过了此次并未下载。

Downloaded from alimaven: http://maven.aliyun.com/nexus/content/groups/public/org/apache/commons/commons-exec/1.3/commons-exec-1.3.pom (11 kB at 8.6 kB/s)

阿里镜像配置

<mirror>
  <id>alimaven</id>
  <mirrorOf>central</mirrorOf>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
4、前文提到的IDEA里使用Maven的几种方式
  • 直接图形化操作:即直接使用Lifecycle里的
    在这里插入图片描述

  • 图形化操作定义自己的命令:即定义自己的mvn命令并执行
    在这里插入图片描述

  • 在 IDEA 中的 Terminal 中使用mvn:即打开Terminal并输入mvn命令
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值