maven配置文件settings.xml中的servers、mirrors和profiles的配置。
总结
mirror的mirrorOf属性要指定为在profile中设置好的远程仓库的id。通过mirrorOf来指定需要复制的仓库,也可以将mirrorOf配置为*来复制所有仓库;如果远程仓库需要认证,才需要为镜像仓库配置server,设置账密,server的id需要与相应的mirror的id一致。
profiles配置
settings.xml中你可以配置多个profile,但必须激活它们才会生效。
<!--激活了才生效-->
<activeProfiles>
<activeProfile>cdn</activeProfile>
</activeProfiles>
下面配置了一个profile,该profile指定了两个repository:id为my_repository1和my_repository2
<profiles>
<profile>
<id>cdn</id>
<repositories>
<repository>
<id>my_repository1</id>
<name>my repository1</name>
<url>mymymy.com/nexus/repository/my_repository1/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
<layout>default</layout>
</repository>
<repository>
<id>my_repository2</id>
<name>my repository2</name>
<url>mymymy.com/nexus/repository/my_repository2/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
<layout>default</layout>
</repository>
</repositories>
</profile>
</profiles>
配置了profile并激活,该profile指定的repository就生效了。
配置好的profile在IDEA的maven窗口可见
只配置远程repository的话,每一次下载依赖都得连接到远程repository。maven还可以为远程repository创建一个镜像放在本地,以方便使用。
mirrors配置
镜像配置说明:
- id: 镜像的唯一标识;
- name: 名称描述;
- url: 地址;
- mirrorOf: 指定仓库id,对哪些仓库的请求优先从该镜像拉取依赖。其中,*匹配所有,所有仓库的请求都优先从该镜像拉取;
使用mirrorOf属性指定该镜像仓库是哪个远程repository的镜像。例如,前面配置了my_repository1和my_repository2两个repository,为其配置镜像:mirror下的id可随意,唯一即可;mirrorOf则需要指定为repository的id,url指定为repository的url。
<mirrors>
<mirror>
<id>my_repository1_mirror</id>
<name>my repository1 mirror</name>
<url>mymymy.com/nexus/repository/my_repository1/</url>
<mirrorOf>my_repository1</mirrorOf>
</mirror>
<mirror>
<id>my_repository2_mirror</id>
<name>my repository2 mirror</name>
<url>mymymy.com/nexus/repository/my_repository2/</url>
<mirrorOf>my_repository2</mirrorOf>
</mirror>
</mirrors>
servers配置
如果远程repository需要认证,则需要为镜像仓库配置认证信息。通过server标签来配置,serverId为镜像的id,与指定的镜像仓库绑定。在这里指定为上面配置的两个mirror:my_repository1_mirror、my_repository2_mirror,username/password填充认证信息。
<servers>
<server>
<id>my_repository1_mirror</id>
<username>sys</username>
<password>>**********</</password>
</server>
<server>
<id>my_repository2_mirror</id>
<username>sys</username>
<password>**********</password>
</server>
</servers>
项目不需要配置仓库地址
**在maven的settings.xml设置好server、mirror、repository,就不需要在项目的pom文件中设置仓库地址了,**如果在项目的pom文件中设置了仓库,则使用项目中的仓库,settings.xml配置的repository不起作用。
<repositories>
<repository>
<id>repository</id>
<name>Maven Repository</name>
<url>maven.aliyun.com/repository/public/</url>
</repository>
</repositories>
示例
<servers>
<server>
<id>my_repository1_mirror</id>
<username>sys</username>
<password>>**********</</password>
</server>
<server>
<id>my_repository2_mirror</id>
<username>sys</username>
<password>**********</password>
</server>
</servers>
<mirrors>
<mirror>
<id>my_repository1_mirror</id>
<name>my repository1 mirror</name>
<url>mymymy.com/nexus/repository/my_repository1/</url>
<mirrorOf>my_repository1</mirrorOf>
</mirror>
<mirror>
<id>my_repository2_mirror</id>
<name>my repository2 mirror</name>
<url>mymymy.com/nexus/repository/my_repository2/</url>
<mirrorOf>my_repository2</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<id>cdn</id>
<repositories>
<repository>
<id>my_repository1</id>
<name>my repository1</name>
<url>mymymy.com/nexus/repository/my_repository1/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
<layout>default</layout>
</repository>
<repository>
<id>my_repository2</id>
<name>my repository2</name>
<url>mymymy.com/nexus/repository/my_repository2/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
<layout>default</layout>
</repository>
</repositories>
</profile>
</profiles>
<!--激活了才生效-->
<activeProfiles>
<activeProfile>cdn</activeProfile>
</activeProfiles>