1.maven仓库的加载顺序
本地仓库 > setting.xml中的配置的仓库(在profile标签中设置的reposity)> pom
文件中设置的profile > pom文件中的reposity > 中央仓库mirror >中央仓库
note:mirror是仓库的代理如果需要从仓库中拉取jar包,会先寻找这个仓库对应的镜像,并从镜像中拉取,如果镜像中没有才会从仓库中拉取。所以镜像的与对应仓库在同一优先级,只是如果镜像存在的话会现在镜像中查找。
这也是我通常安装好maven之后需要添加aliyun镜像的原因了,maven默认会有一个id为central的中央仓库,所以即使不配置reposity也没什么大问题。
##setting.xml
<mirrors>
<mirror>
<id>aliyun</id>
<name>aliyun</name>
<mirrorOf>central</mirrorOf>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
</mirrors>
2.mirro server reposity的关系
但是中央仓库不会包含所有的jar包,例如一些驱动包或者我们自己的jar包,这时候就需要在setting.xml或者pom中添加私服仓库或者第三方仓库,两种方式作用一样,只是setting.xml的优先级比较高
仓库分类
##setting.xml setting.xml中的仓库在profile中设置,并利用activeProfiles激活,当然也可以设置激活条件,就这需要用到
<profile>
<id>nexus_profile</id>
<repositories>
<repository>
<id>nexus_reposity</id>
<name>Repository for JDK 1.4 builds</name>
<url>http://192.168.1.1:8081/repository/maven-public/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<snapshotPolicy>always</snapshotPolicy>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus_plugin_reposity</id>
<name>Maven China Mirror</name>
<url>http://192.168.1.1:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<activeProfiles>
<activeProfile>nexus_profile</activeProfile>
</activeProfiles>
##pom.xml
<pluginRepositories>
<pluginRepository>
<id>nexus2</id>
<name>nexus</name>
<url>http://192.168.1.1:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.1.1:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
2.上面这种方式只是可以下载jar包,但是如果需要添加自己的私服,就需要在setting.xml文件中添加server信息(即maven deploy时需要的用户名密码),以及在pom文件中添加
##pom.xml
<distributionManagement>
<repository>
<id>nexus-release</id>
<name>NEXUS Release</name>
<url>http://192.168.1.1:8081/repository/maven-snapshots/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>NEXUS SNAPSHOTS</name>
<url>http://192.168.1.1:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
##setting.xml
<server>
<id>nexus-release</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
需要注意server中的id必须要和distributionManagement中id相同。
如果你想为一个第三方库添加镜像,需要先设置仓库信息,然后添加镜像信息
<repositories>
<repository>
<id>A</id>
<url>http://www.A.com/maven2</url>
</repository>
</repositories>
<mirrors>
<mirror>
<id>B</id>
<name>B Central</name>
<url>http://www.B.com/maven2</url>
<mirrorOf>A</mirrorOf>
</mirror>
</mirrors>
profile标签可以添加激活条件,这样既可以根据项目设置不同的仓库,只需要添加activation标签
- profile中定义的 properties键值对可以在pom.xml中使用,若有两个profile同时定义了一个属性hello,且这两个profile都被激活。那么后定义的profile会覆盖前面定义的profile属性,即在pom中使用的hello属性的值是后定义profile中的。
- 使用默认激活方式时<activeByDefault>true</activeByDefault>,只有在没有有指定其他profile激活时才会生效。
<profile>
<id>jdk-1.4</id>
<activation>
<jdk>1.4</jdk>
</activation>
<!--此标签表示没有其他profile生效时生效-->
<activeByDefault>true</activeByDefault>
<properties>
<name>test</name>
</properties>
<repositories>
<repository>
<id>jdk14</id>
<name>Repository for JDK 1.4 builds</name>
<url>http://www.myhost.com/maven/jdk14</url>
<layout>default</layout>
<snapshotPolicy>always</snapshotPolicy>
</repository>
</repositories>
</profile>
网友评论