由于maven 使用上手很容易所以很多时候可以囫囵吞枣能够使用就可以了,由于作者最近在做的持续集成的代码扫描的时候,发现私有云里面大型工程maven依赖,如果没有弄清楚里面的配置复杂的项目很难在私有环境里面正常的编译过。下面作者根据自己的经验谈谈常用的配置的作用到底是什么。
首先说明maven配置都是那些配置
1. pom.xml 配置
pom.xml 配置主要分为两类,一类是用于配置自己的实际依赖, 二类仅仅用于声明一些版本和仓库便于版本管理和发布。
在我们java工程里面有一个pom.xml 这里面主要配置工程的依赖库,pom配置是可以被继承的,如果是父级依赖一般是做版本控制以及指定私有仓库的。如下图: 下图主要是展示父pom 主要作用是版本控制以及私有仓库指定。
重点来了:
上图repository的id的作用是啥(作者当时很是迷惑,可以乱写那要id干啥),这个id实际会和maven settings.xml 的配置文件里面的mirrors 配置有关。
2. maven 的settings.xml
下面重点讲一下settings的配置
如图settings 主要有mirrors servers 和profiles 三部分组成。
a. mirrors
mirrors 主要作用是一个镜像代理,便于内外网厂库切换,或者单独配置内网使用。
如果pom中的repository的id能和mirrorOf的值关联上,那么url以mirror的为准,否则以repository中自己的url为准。
<mirror>
<id>test-nexus</id>
<mirrorOf>*</mirrorOf>
<name>sugon local repository</name>
<url>http://172.22.5.34:9996/repository/sugoncloud-public/</url>
</mirror>
mirrorof 有三种值:
* 代表 所有仓库请求都走这个配置的镜像代理。
central 默认是maven 的仓库,如果其它镜像访问不到(这里是服务访问不到而不是没有依赖包)。
其它: 比如test 、native-repo 这些关联的是pom里面配置的私有仓库id。
b. servers
servers 里面的配置 如下:
<server>
<id>nexus-releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
这个配置的作用是它关联pom里面配置私有仓库的id, 在推送依赖包的使用根据id作认证的。
c. profiles
profiles 主要是配置全局私用仓库。就不详解了,和pom类似配置如下:
<profile>
<id>nexus-aliyun</id>
<repositories>
<repository>
<id>public</id>
<name>Public Repositories</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>Public Repositories</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
</profile>
补充一个最重要的: 由于上文说到的父pom(版本控制) 子工程依赖就是依赖的父pom文件而不是jar包 如果只配置mirrors 是不能拉取父pom文件的,如果需要拉取父pom文件那么需要配置repository。
补充二:常用问题
a. 如果我一个工程配置有多个私有仓库,那么他们的扫描顺序是啥:
本地仓库 》settings.xml 中profile 定义的私有仓库 》pom 定义的私有仓库 》mirrors代理
b. 如果我在settings.xml 配置多个私服是如何扫描依赖包的呢?
如果settings.xml 配置多个私服那么扫描依赖包的私有会以配置的顺序(没有确认)挨着一个一个找知道找到为止,如果都找不到就去中央仓库找。
最后敬上参考地址:
Maven settings.xml中私有仓库配置浅析 - 简书