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

来源:互联网 发布:淘宝手机充值代理加盟 编辑:程序博客网 时间:2024/04/30 05:18

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。后面我们会详细介绍这个软件的配置,以及如何使用。

原创粉丝点击