何为 Maven 仓库
在 Maven 世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构件,任何一个构件都有一组坐标唯一标识。
得益于坐标机制,任何 Maven 项目使用任何一个构件的方式都是完全相同的。在此基础上,Maven 可以在某个位置统一存储所有 Maven 项目共享的构件,这个统一的位置就是仓库。
为了实现重用,项目构建完成后生成的构件也可以安装或者部署到仓库中,供其他项目使用。
仓库的分类
对于 Maven 来说,仓库只分为两类:本地仓库和远程仓库。当 Maven 根据坐标寻找构件的时候,他首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven 就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有需要的构件,Maven 就会报错。
中央仓库是 Maven 核心自带的远程仓库,它包含了绝大部分开源的构件。在默认情况下,当本地仓库没有 Maven 需要的构件的时候,它就会尝试从中央仓库下载。
私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目也能部署到私服上供其他项目使用。
除了中央仓库和私服,还有很多其他公开的远程仓库,常用的有:
.....................
本地仓库
默认情况下,每个用户在自己的用户目录下都有一个路径名为 .m2/repository 的仓库目录。例如,笔者的用户名是fengwei,我在 mac 机器上的本地仓库地址为 /Users/fengwei/.m2/repository 。
有时候,因为某些原因(例如 C 盘空间不够),用户会想要自定义本地仓库目录地址。这时可以编辑 ~/.m2/settings.xml ,设置localRepository 元素的值为想要的仓库地址。例如
~/Documents/nexus/repository
这样,该用户的本地仓库地址就被设置成了~/Documents/nexus/repository 。
需要注意的是,默认情况下,~/.m2/settings.xml 文件是不存在的,用户需要从 Maven 安装目录复制 $M2_HOME/conf/settings.xml 到~/.m2 目录在进行编辑(建议不要直接修改全局目录的 settings.xml 文件)。
远程仓库
可以在pom.xml 中,添加其他的远程仓库。
Sonatype
Sonatype Repository
http://repository.sonatype.org/content/groups/public/
default
true
false
该例中,声明了一个 id 为 Sonatype,名称为 Sonatype Repository 的仓库。任何一个仓库声明的 id 必须是唯一的,尤其需要注意的是, Maven 自带的中央仓库使用的 id 是 central, 如果其他的仓库声明也使用该id,就会覆盖中央仓库的配置。配置中的 url 值指向了仓库的地址,一般来说,该地址都基于 http 协议,Maven 用户都可以在浏览器中打开仓库地址浏览构件。
该例配置中的releases 和snapshots 元素比较重要,它们用来控制 Maven 对于发布版构件和快照版构件的下载。这里需要注意的是 enabled 子元素,该例中 releases 的 enabled 值为 true,表示开启 JBoss 仓库的发布版本下载支持,而 snapshots 的 enabled 值为 false ,表示关闭 JBoss 仓库的快照版本的下载支持。因此,根据该配置, Maven 只会从 JBoss 仓库下载发布版的构件,而不会下载快照版的构件。
快照版本
在 Maven 的世界中,任何一个项目或者构件都必须有自己的版本。版本值可能是1.0.0、1.3-alpha-4、2.0、2.1-SNAPSHOT或者 2.1-20091214.221414-13。其中 1.0.0、1.3-alpha-4、2.0 是稳定的发布版本,而 2.1-SNAPSHOT 和 2.1-20091214.221414-13 是不稳定的快照版本。
Maven 为什么要区分发布版本和快照版本呢?
快照版本只应该在组织内部的项目或模块间依赖使用,因为这时,组织对这些快照版本的依赖具有完全的理解及控制权。项目不应该依赖于任何组织外部的快照版本依赖,由于快照版本的不稳定性,这样的依赖会造成潜在的危险。
镜 像
镜像仓库可以理解为仓库的副本,从仓库中可以找到的构件,从镜像仓库中也可以找到。比如针对中央仓库 http://repo1.maven.org/maven2 ,在中国有它的镜像仓库,这样我们直接访问镜像仓库,更快更稳定。
...
maven.net.cn
central mirror in china
http://maven.net.cn/content/groups/public
central
...
其中,<mirrorOf> 指明了为哪个仓库配置镜像,可以使用通配符如:
常用的仓库搜索地址
http://mvnrepository.com/ https://repository.sonatype.org/ http://search.maven.org/参考:
Maven 实战(许晓斌 著);
点Maven入门指南④:仓库击打开链接;