1、介绍
在工程的pom.xml中写了那么多<depedency></depedency>依赖,那么maven是如何去找到这些jar提供给工程使用的呢?
查找jar的方式
<dependency>
<groupId>kettle.org.ftp4che</groupId>
<artifactId>ftp4che</artifactId>
<version>0.7.1</version>
</dependency>
就得从repository下开始找-> kettle -> org -> ftp4che -> ftp4che -> 0.7.1
也就是将groupId 、vrtifactId和version拼接起来
2、查找顺序
-
1、本地仓库
-
2、maven_home/conf/settings.xml 中的profiles
注意:通常配置公司私服,或者阿里云等第三方镜像
-
3、工程的pom.xml文件配置的repositories。
注意:通常是本工程才需要的一些第三方公司仓库,比如kettle
如果上面有这个repositories,那么就不会在找这个
-
4、maven_home/conf/settings.xml 中的mirrors
仓库的镜像,作为最后一层,<mirrorOf> XXX </mirrorOf>中XX一般设置为设置为central
一般设置为阿里云即可
如果<mirrorOf> XXX </mirrorOf>中,XXX设置了profiles的id,则profiles无效,会直接转向这个代理。
3、<mirrorOf> XXX </mirrorOf>规则如下:
-
1、XXX 相同的,不管是自己定义的,还是*, 再或者是central,都只会使用第一个
-
2、如果XXX设置了profiles的id,则profiles无效,会直接转向这个代理。
-
3、central:是常用表示上面的任何仓库找不到,都去中央仓库repo.maven2也就是id为center里面找,所以profiles里面不要设置一个id为central的仓库。
-
4、* :表示任何的jar包都会从这个镜像里面找,本地仓库也会跳过
4、配置经验:
-
1、profiles中主要配置公司私服以及阿里云、163这些第三方镜像
-
2、mirror是镜像,一般只需要设置一个central就可以了,建议使用阿里云作为中央仓库的镜像,速度很快
-
3、pom.xml中的repositories中只配置本工程才需要的第三方私服,比如kettle
5、验证查找顺序的例子
第一种情况:各个配置位置无交叉,正常配置
运行结果
第二种情况:每种仓库设置两个==>morror。由于两个都是central,所以只有第一个生效
运行结果:
第三种情况:mirrorOf是profiles的 ==> 对应的profiles仓库不访问,直接访问mirror
运行结果: