Maven实战 --- 仓库、镜像、快照


何为 Maven 仓库

在 Maven 世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构件,任何一个构件都有一组坐标唯一标识。

得益于坐标机制,任何 Maven 项目使用任何一个构件的方式都是完全相同的。在此基础上,Maven 可以在某个位置统一存储所有 Maven 项目共享的构件,这个统一的位置就是仓库。

为了实现重用,项目构建完成后生成的构件也可以安装或者部署到仓库中,供其他项目使用。

仓库的分类

对于 Maven 来说,仓库只分为两类:本地仓库和远程仓库。当 Maven 根据坐标寻找构件的时候,他首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven 就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有需要的构件,Maven 就会报错。

中央仓库是 Maven 核心自带的远程仓库,它包含了绝大部分开源的构件。在默认情况下,当本地仓库没有 Maven 需要的构件的时候,它就会尝试从中央仓库下载。

私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目也能部署到私服上供其他项目使用。

除了中央仓库和私服,还有很多其他公开的远程仓库,常用的有:

.....................

本地仓库

默认情况下,每个用户在自己的用户目录下都有一个路径名为 .m2/repository 的仓库目录。例如,笔者的用户名是fengwei,我在 mac 机器上的本地仓库地址为 /Users/fengwei/.m2/repository 。

有时候,因为某些原因(例如 C 盘空间不够),用户会想要自定义本地仓库目录地址。这时可以编辑 ~/.m2/settings.xml ,设置localRepository 元素的值为想要的仓库地址。例如

<settings>
	<localRepository>~/Documents/nexus/repository</localRepository>
</settings>
这样,该用户的本地仓库地址就被设置成了~/Documents/nexus/repository 。

需要注意的是,默认情况下,~/.m2/settings.xml 文件是不存在的,用户需要从 Maven 安装目录复制 $M2_HOME/conf/settings.xml 到~/.m2 目录在进行编辑(建议不要直接修改全局目录的 settings.xml 文件)。

远程仓库

可以在pom.xml 中,添加其他的远程仓库。

<repositories>
    <repository>
        <id>Sonatype</id>
        <name>Sonatype Repository</name>
        <url>http://repository.sonatype.org/content/groups/public/</url>
        <layout>default</layout>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

该例中,声明了一个 id 为 Sonatype,名称为 Sonatype Repository 的仓库。任何一个仓库声明的 id 必须是唯一的,尤其需要注意的是, Maven 自带的中央仓库使用的 id 是 central, 如果其他的仓库声明也使用该id,就会覆盖中央仓库的配置。配置中的 url 值指向了仓库的地址,一般来说,该地址都基于 http 协议,Maven 用户都可以在浏览器中打开仓库地址浏览构件。

该例配置中的releasessnapshots 元素比较重要,它们用来控制 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 ,在中国有它的镜像仓库,这样我们直接访问镜像仓库,更快更稳定。

<settings>
    ...
    <mirrors>
        <mirror>
            <id>maven.net.cn</id>
            <name>central mirror in china</name>
            <url>http://maven.net.cn/content/groups/public</url>
            <mirrorOf>central</mirrorOf>    <!--表明为central中央仓库配置镜像仓库-->
        </mirror>
    </mirrors>
    ...
</settings>

其中,<mirrorOf> 指明了为哪个仓库配置镜像,可以使用通配符如:<mirrorOf>*</mirrorOf>,或者 <mirrorOf>repo1,repo2</mirrorOf> 等进行匹配。一旦配置了镜像,所有针对原仓库的访问将转到镜像仓库的访问,原仓库将不再能直接访问,即使镜像仓库不稳定或停用。在搭建私服的时候,我们通常为所有仓库设置镜像为私服地址,通过私服对所有仓库进行统一管理。


常用的仓库搜索地址

http://mvnrepository.com/
https://repository.sonatype.org/
http://search.maven.org/


参考:

Maven 实战(许晓斌 著);

点Maven入门指南④:仓库击打开链接











  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值