上一篇文章中简单说明了仓库的作用以及分类,这里详细说明一下相互之间的区别,以及常用的配置方法等
中央仓库
maven提供了两个远程仓库以方便使用maven工具的开发人员使用,就像java的Object类一样,用户无需显示配置就可以默认使用maven提供的远程仓库
id:central
url:http://repo1.maven.org/maven2/ (或者使用http://repo.maven.apache.org/maven2/)
可以直接在浏览器中输入url查看仓库的内容
在%MAVEN_HOME%/lib/maven-model-builder-3.2.1.jar中的org/apache/maven/model/pom-4.0.0.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>
其他远程仓库
中央仓库中提供的构件可以满足90%的开发需要了,但如果需要的构建中央仓库中没有的话就需要配置其他的远程仓库了,网上有很多开源的远程仓库,例如spring、jboss等
远程仓库的配置可以放在全局的settings.xml中也可以放在项目的pom.xml中,建议放在pom.xml中这样就不会对其他项目影响了。配置跟中央仓库类似,下面放一些常用的远程仓库的配置信息:
<repositories>
<repository>
<id>jboss-cache</id>
<name>jboss-cache</name>
<url>http://repository.jboss.org/maven2</url>
</repository>
<repository>
<id>mvnsearch</id>
<name>mvnsearch Maven Repository</name>
<url>http://www.mvnsearch.org/maven2</url>
</repository>
<repository>
<id>ibiblio</id>
<name>ibiblio Maven Repository</name>
<url>http://www.ibiblio.org/maven2</url>
</repository>
<repository>
<id>mirrors.ibiblio</id>
<name>mirrors.ibiblio Maven Repository</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
</repository>
<repository>
<id>repo.springsource.org</id>
<name>repo.springsource.org-releases</name>
<url>http://repo.springsource.org/libs-milestone-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
说明:
- id要唯一,不然会把已经存在的仓库给覆盖掉,例如central,就会把中央仓库给覆盖掉
当然还有一些闭源的仓库,这些是需要在settings.xml中配置认证信息,如下配置:
<settings>
......
<servers>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
......
</settings>
说明:
- 每个<server/>标签对应一个仓库,
- id是<repository/>标签中配置的id,这里也可以看出来id要填写成唯一的原因了
私服
私服也是一种特殊的远程仓库,主要架设在局域网中,代理广域网上的远程仓库,这样可以节省带宽、加速maven构建、提高稳定性、部署第三方构件等等,还有一些其他的好处这里就不详说了。架构图如下所示
现在有很多常用的做私服的软件,有开源的有闭源的,如nexus、Archiva等,这里不具体描述怎么创建自己的私服了。使用私服代理远程仓库这里就会引入maven一个很重要的功能
镜像
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。从概念上就可以看出这是给私服量身定做的一个功能。具体配置很简单,如下
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
-->
<mirror>
<id>mirrorId</id>
<mirrorOf><strong>repositoryId</strong></mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
</mirrors>
说明:
- 任何对于<mirrorOf/>表示的远程仓库的请求都会转到<url/>标签配置的私服中。
- mirrorOf不仅可以配置具体的远程仓库的id,也可以使用通配符来满足复杂的应用场景
- <mirrorOf>*</mirrorOf> 匹配所有远程仓库。
- <mirrorOf>external:*</mirrorOf> 匹配所有不在本机上的远程仓库(即使用localhost、file://协议的除外)。
- <mirrorOf>repo1,repo2</mirrorOf> 匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。
- <mirrorOf>*,!repo1</miiroOf> 匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。
- 镜像会完全屏蔽被镜像的仓库,当镜像不稳定或者停止服务时,maven仍然不会访问远程仓库。
常用的仓库搜索服务
当开发时有时候不知道怎么配置某个构建的依赖怎么配置,就可以在仓库搜索服务中查询相应构建,选中相应版本就会有相应的依赖配置关系,如下图
常用的几个仓库搜索服务列表:
- Sonatype Nexus : http://repository.sonatype.org/
- Jarvana : http://www.jarvana.com/jarvana/
- MVNbrowser : http://www.mvnbrowser.com/
- MVNrepository : http://mvnrepository.com/
附:
《maven实战》
http://my.oschina.net/sunchp/blog/100634
http://www.iteye.com/problems/60531
http://www.oschina.net/question/698806_159140
http://my.oschina.net/heweipo/blog/480244
http://ajita.iteye.com/blog/1415652