Using Mirrors for Repositories
Repositories是你指定的用于下载某些artifacts的位置,如dependencies和maven-plugins,Repositories可以在项目中声明,这意味着如果你有自己的订制Repositories,那么将能够很容易的共享你的项目,然而,你也可能想要不修改项目文件的情况下使用一个特殊仓库的镜像。
使用镜像的理由:
- 互联网上存在同步的镜像,并且更近,更快。
- 你想要用你更能控制的你自己的内部repository替换一个特别的repository
- 你想要运行一个仓库管理器来提供一个镜像的本地缓存,并且需要使用它的URL替代。
要配置一个给定repository的镜像,你需要在你的settings配置文件(settings.xml)中配置它自己的id和url,并且指定mirrorOf为所要配置Repository的ID,例如主要的美国中心Repository包含的ID默认为central,所以如果要使用欧州中心Repository,你需要配置如下:
<settings>
...
<mirrrors>
<mirror>
<id>UK</id>
<name>UK central</name>
<url>http://uk.maven.org/maven2</url>
<mirrorOf>cenral</mirrorOf>
</mirror>
</mirrors>
...
</settings>
一个给定的Repository只能拥有一个镜像,换句话说,你不映射一个Repository到一组使用相同值的镜像。虽然maven不限制,但是只会选择第一个匹配到的镜像。
使用单一Repository
你可以强制Maven使用单一的Repository,并通过它来反射所有的仓库请求。这要的Repository必须包含所有的需要的artifacts或者能够代理对其他Repository的请求。此种配置在使用一个公司内部的使用Maven仓库管理工具代理其他请求的仓库时是非常有用的。
要实现这样的配置,需要将mirrorOf值设置为*。如下:
<settings>
...
<mirrors>
<mirror>
<id>internal-repository</id>
<name>Maven Repository Manager running on repo.mycompany.com</name>
<url>http://repo.mycompany.com/proxy<url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
...
</settings>
Advanced Mirror Specification
一个镜像(mirror)可以操作多个Repository,语法如下:
- *表示匹配所有仓库ID
- external:*表示匹配除了本地和基于文件的Repository
- 指定多个RepositoryID时可以用逗号分隔,如repo,repo1。
- *,!repo1表示匹配除了repo1外的所有仓库ID。
如:
<settings>
...
<mirrors>
<mirror>
<id>internal-repository</id>
<name>Maven Repository Manager running on repo.mycompany.com</name>
<url>http://repo.mycompany.com/proxy</url>
<mirrorOf>external:*,!foo</mirrorOf>
</mirror>
<mirror>
<id>foo-repository</id>
<name>Foo</name>
<url>http://repo.mycompany.com/foo</url>
<mirrorOf>foo</mirrorOf>
</mirror>
</mirrors>
...
</settings>