您当前的位置: 首页 >  maven

石头wang

暂无认证

  • 5浏览

    0关注

    295博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

石头wang 发布时间:2020-09-02 10:58:27 ,浏览量:5

一篇明白: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:














  /Users/stonewang/.m2/repository
  
    org.apache.maven.plugins
    org.codehaus.mojo
  



[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)

阿里镜像配置


  alimaven
  central
  aliyun maven
  http://maven.aliyun.com/nexus/content/groups/public/

4、前文提到的IDEA里使用Maven的几种方式
  • 直接图形化操作:即直接使用Lifecycle里的 在这里插入图片描述

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

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

关注
打赏
1663722529
查看更多评论
立即登录/注册

微信扫码登录

0.0551s