Maven 远程中央仓库镜像

作者:範宗雲 来源:原创 发布时间:2015-04-16 归档:maven

环境 : Windows 8 Maven 3.2.5
当我们在 pom.xml 中配置依赖时, 依赖所需的构件, maven 均去本地仓库中取。如果本地仓库还没有所需的构件, maven 会尝试到远程仓库中取回到本地仓库, 然后再从本地仓库中取所需的构件。在这个过程中, 如果 maven 在远程仓库获取不到所需的构件 ( 可能是这些构件不存在, 或者是构件存在但由于网络原因取不回来, 又或者是人为的中途强制终止了等待 ), 那么构建就会失败, 项目会报错 ( 通常是报 artifactId 的错 )。这个时候, 你应该去本地仓库中, 找到这些构件所在的目录, 然后删除这些目录, 再重新构建, 如果顺利, 也许构建会成功。
上面提到过的远程仓库, maven 默认使用的服务地址是 https://repo.maven.apache.org/maven2, 你可以在 maven 的 super pom.xml 中找到它。实质上, 它使用的镜像地址是 http://repo1.maven.org/maven2。
maven super pom.xml
			. . .
			<repositories>
		      <repository>
		        <id>central</id>
		        <name>Central Repository</name>
		        <url>https://repo.maven.apache.org/maven2</url>
		        <layout>default</layout>
		        <snapshots>
		          <enabled>false</enabled>
		        </snapshots>
		      </repository>
		    </repositories>
			. . .
			
具体位置是 :%MAVEN_HOME%\lib\maven-settings-builder-3.2.5.jar\org\apache\maven\model\pom-4.0.0.xml
它类似于 Java 中的 Object 类, 所有的 pom.xml 都隐式的继承自它。你可以通过执行 mvn help:effective-pom 命令来查看有效的 pom 配置信息。
远程中央仓库镜像地址列表

Location URL
United States, California ( 美国加利福尼亚 ) http://repo1.maven.org/maven2
United Kingdom ( 英国 ) http://uk.maven.org/maven2
United States, North Carolina ( 美国北卡罗莱纳州 ) http://mirrors.ibiblio.org/pub/mirrors/maven2
France ( 法国 ) http://maven.antelink.com/content/repositories/central
  http://maven.tmatesoft.com/content/groups/public

settings.xml 配置远程仓库镜像
			<mirrors>
		      <mirror>
			    <id>ibiblio.org</id>
			    <mirrorOf>central</mirrorOf>
			    <name>mirrors repositories from central</name>
			    <url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
		      </mirror>
		    </mirrors>
			
配置镜像通常是为了提高获取构件的速率, 镜像往往能提供比中央仓库更快的服务 ( 通常选择地理位置上与自己较近的镜像 ), 从而提高下载速度, 最终达到提高构建效率的目的。你可以在这里配置多个镜像, 值得一提的是, 只有当 mirrorOf 与 repository id 匹配时 ( 参考上面的 maven super pom.xml ), 该镜像才会起作用。一个镜像可以处理多个库 :
<mirrorOf>*</mirrorOf> 能匹配所有的 repository id
<mirrorOf>repo1,repo2</mirrorOf> 匹配 repo1 或 repo2 库
<mirrorOf>external:*</mirrorOf> 匹配除本地仓库之外的所有库
<mirrorOf>*,!repo1</mirrorOf> 匹配除 repo1 之外的所有库
当一个库匹配到多个镜像时, maven 优先选择与库 id 完全匹配的镜像, 若没有, 则按照镜像配置的先后顺序取第一个。