Maven系列学习(4)-仓库简介

Maven仓库是为了储存和管理Maven构件(如:Maven依赖和Maven插件)。因为仓库是储存Maven构件的,而任何一个构件都有一个唯一的坐标,这个坐标就可以定义其在仓库中的唯一存储路径。我们通过本地仓库,隐隐约约可以知道仓库路径大致是groupId/artifactId/version/artifactId-version.package。而我们在Maven源码中也证实了其存储的路径。

第一、仓库分类

仓库大致分为两类,本地仓库和远程仓库。当Maven根据构件坐标寻找构件时,首先查找本地仓库,如果本地仓库存在构件,则直接使用(更改classpath);如果本地仓库不存在,则需要在远程仓库中查找,并下载到本地仓库;如果本地仓库和远程仓库都没有,Maven会报错。其实Maven远程仓库还有一类特殊的仓库——私服。我们在项目开发之前,有必要在局域网创建一个私服,用途:1、代理所有外部的远程仓库;2、内部项目可以部署到私服;3、有时可避免没有外网的情况。仓库分类如下图:


1.1 本地仓库

默认情况下,每个用户在自己的用户目录下都有一个.m2/repository/的仓库目录。不过,很多时候,我们都不想在C盘储存太多的内容,这时,我们需要编辑~/.m2/setting.xml,设置如下:

<settings>
    <localRepository>E:/jars</localRepository>
</settings>

这样,用户的本地仓库目录就变成了E:/jars了。

构件必须存放在本地仓库后,才能供其他Maven项目使用。例如:A依赖B,而A和B都不能通过远程仓库获取,这时为了构件A,就得将B构建并安装到本地仓库。命令:mvn clean install。

1.2 中央仓库

Maven内置了一个远程仓库,我们称其为中央仓库。我们在maven-model-builder-3.0.5.jar的org\apache\maven\model\pom-4.0.0.xml中,我们可以看到如下配置:

<repositories>
  <repository>
    <id>central</id>
    <name>Central Repository</name>
    <url>http://repo.maven.apache.org/maven2</url>
    <layout>default</layout>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </repository>
</repositories>
所有Maven的pom都是从这个pom继承。

1.3 私服

私服其实是本地仓库和远程仓库之间的一个桥梁。通过它,我们可以获取以下好处:

a、节省自己的外网宽带;

b、加速Maven构建(本地构建当然比远程构建快了);

c、可以部署第三方构件(如oracle的jdbc驱动包,由于许可证的缘故,不能从中央仓库获取);

d、提高稳定下(在没有外网的情况下);

e、降低中央仓库负荷。


第二、配置远程仓库

要想在项目中配置远程仓库,只需要在project节点下配置如下:

<repositories>
  <repository>
    <id>other-repo</id>
    <name>Other Repository</name>
    <url>http://other.org/maven2</url>
    <layout>default</layout>
    <release>
        <enabled>true</enabled>
    </release
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </repository>
</repositories>
当然,release和snapshots节点下还可以配置其他元素节点,在此不细说。

1、远程仓库认证,只需要认证用户名和密码,我们再settings.xml中配置上即可,如下图:

<servers>
    <server>
        <id>other-repo</id>
        <username>repo-user</username>
        <password>repo-pass</password>
    </server>
</servers>
2、部署到远程仓库,配置如下:

<distributionManagement>
  <repository>
    <id>proj-r</id>
    <name>proj release</name>
    <url>...</url>
  </repository>
  <snapshotRepository>
    <id>proj-r</id>
    <name>proj release</name>
    <url>...</url>
  </snapshotRepository>
</distributionManagement>
我们通过命令mvn clean deploy,就可以将项目构件部署到远程仓库。这儿的关键在于url和id的配置。


第三、仓库解析机制

我们知道,当本地仓库没有构件时,Maven会从远程仓库下载;当依赖版本为快照的时候,Maven会下载最新的快照。我们总结步骤如下:

a、依赖范围为system,直接从本地解析;

b、根据仓库坐标计算规则,尝试从本地解析构件,如果解析成功,则终止;

c、本地解析失败,如果依赖是发布版本,则依次遍历所有远程仓库,发现后,下载并解析,则终止;

d、如果依赖为快照版本(snapshot),则取最新快照版本。


第四、私服管理软件

我们使用Sonatype Nexus。后面我们会详细介绍这个软件的配置,以及如何使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值