Maven仓库

9 篇文章 0 订阅
9 篇文章 2 订阅

Maven仓库

Maven在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是Maven仓库。
仓库路径为 groupId/artifactId/version/artifactId-version.packaging
groupId 中的 . 转换为 /

仓库分类

Maven仓库分为本地仓库和远程仓库。
远程仓库分为:中央仓库, 私服, 其他公共库。

当Maven根据坐标寻找构件时,首先会看本地仓库是否存在, 如果不存在,则去远程仓库查找,下载到本地再使用。

本地仓库

默认在 ~/.m2/repository/ 仓库目录下。
也可以自定义, 修改 ~/.m2/setting.xml

<settings>
  <localRepository>/path/to/local/repo</localRepository>
</settings>

本地仓库除了从远程仓库下载, 本地的项目也可以构建、安装。
使用下面命令:
mvn clean install

中央仓库

中央仓库是默认的远程仓库,Maven的安装文件中自带了中央仓库的配置。
$M2_HOME/lib/maven-model-builder-3.5.2.jar 中。
该文件中的POM是所有Maven项目都会继承的超级POM。
中央仓库包含了这个世界上绝大多数流行的开源java构件,以及源码,作者信息,许可证信息等。

私服

私服是架设在局域网内的仓库服务,私服代理广域网上的远程仓库。
从外部远程仓库下载使用到的构件,缓存到私服,为局域网内Maven用户使用。
一些内部构件也可以从本地上传到私服上供大家使用。
部署私服的好处:
- 节省自己外网带宽
- 加速Maven构建
- 部署第三方构件
- 提高稳定性,增强控制
- 降低中央仓库负荷

流行的建立Maven私服的软件- Nexus

远程仓库配置

在项目的POM中配置该仓库

<project>
    <repositories>
        <repository>
            <id>my-project</id>
            <name>Public Repository of project</name>
            <url>http://maven.xxx.com/nexus/content</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

id为唯一的标识, 配置在 setting.xml 中
releases 表示支持发布版本下载
snapshots 表示支持快照版本下载
setting.xml中配置:

  <servers>
    <server>
      <id>my-project</id>
      <username>name</username>
      <password>pass</password>
    </server>
  </servers>

为了安全,设置了用户名和密码访问该仓库。

部署到私服

设置项目POM文件

    <distributionManagement>
        <repository>
            <id>my-project</id>
            <name>Public Repository of project</name>
            <url>http://maven.xxx.com/nexus/content</url>
        </repository>
        <snapshotRepository>
            <id>my-snapshot-project</id>
            <name>Public Repository of snapshot project</name>
            <url>http://maven.xxx.com/nexus/snapshot</url>
        </snapshotRepository>
     </distributionManagement>

repository 发布版本
snapshotRepository 快照版本
将id在 settings.xml 中 server元素中配置。
发布使用命令 mvn clean deploy

快照版本

快照 snapshot 版本,是不稳定版本, 主要解决开发过程中依赖项目POM文件的频繁修改,另一方面也减少对版本号的滥用。
快照版本发布到私服后,会自动打上时间戳,当依赖的项目使用该项目时,自动查找最新的构件下载。
默认情况, Maven每天检查一次更新(由仓库配置的 updatePolicy控制),也可以强制使用 -U检查更新。
mvn clean instll -U

从仓库解析依赖的机制

当依赖版本是快照时,自动找最新的快照

  1. 当依赖范围是 system 时, Maven从本地文件系统解析
  2. 从本地仓库寻找,发现则解析成功
  3. 本地不存在,发现为显式的发布版本时,如1.2, 1.2-beta等,遍历所有远程仓库,发现后,下载解析
  4. 依赖为 RELEASE或者LATEST,则读取远程元数据 groupId/artifactId/maven-metadata.xml, 与本地仓库对应元数据合并后,计算出真实值,再下载相应文件
  5. SNAPSHOT版本,读取所有远程元数据,与本地合并后,找到最新的快照值。
  6. 将最后得到的时间戳文件,复制到对应的非时间戳格式格式,如SNAPSHOT。

镜像

为了快速访问, 使用仓库的镜像 mirrors

  <mirrors>
         <mirror>
           <id>alimaven</id>
           <mirrorOf>central</mirrorOf>
           <name>aliyun maven</name>
 <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
         </mirror>
    </mirrors>

< mirrorOf >的值为central, 表示该配置为中央仓库的镜像。
<mirrorOf>*</mirrorOf> 匹配所有远程仓库
<mirrorOf>external:*</mirrorOf> 匹配所有不在本机的远程仓库
<mirrorOf>repo1,repo2</mirrorOf> 匹配repo1和repo2, 逗号分隔多个
<mirrorOf>*,!repo1</mirrorOf> 匹配所有, repo1除外。

地址: http://blog.csdn.net/yonggang7/article/details/79599519

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值