[Maven]仓库

01. Maven仓库分类

a). 本地仓库(本地资源库)

b). 中央仓库(中央存储库)

c). 远程仓库(远程存储库)

02. Maven依赖查询

Maven的依赖库查询顺序为:

       1. 在 Maven 本地资源库搜索,如果没有找到,进入第 2 步,否则退出。

       2. 在 Maven 中央存储库搜索,如果没有找到,进入第 3 步,否则退出。

3. 在 Maven 远程存储库搜索,如果没有找到,提示错误信息,否则退出。

03. 简介及配置

是什么? 干什么用?如何配置?

03-A. 本地仓库

a). 简介

Maven的本地资源库是Maven在本地存储构件的仓库,用于将Maven项目的依赖关系(jar)和其他文件存储在本地文件夹。

注意:maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建。

b). 配置

maven本地仓库的默认位置:在用户的目录下都有一个 .m2/repository/ 的仓库目录,即 {USER_HOME}/.m2/repository/

1). 更改配置用户范围的本地仓库:修改 {USER_HOME}/.m2/settings.xml 文件,设置 localRepository 元素的值为想要的仓库地址

<!-- localRepository
 | The path to the local repository maven will use to store artifacts.
 |
 | Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>E:\develop\repositories\maven\repository</localRepository>

这时候,maven的本地仓库地址就变成了 E:\develop\repositories\maven\repository

注意:此时配置的maven的本地仓库是属于用户范围的。

2). 更改配置全局范围的本地仓库:在 {MAVEN_HOME}/conf/settings.xml 中更改配置,更改配置的方法同上

注意:此时更改后,所有的用户都会受到影响,而且如果maven进行升级,那么所有的配置都会被清除,所以要提前复制和备份 {MAVEN_HOME}/conf/settings.xml 文件

03-B. 中央仓库

a). 简介

Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。

中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。在本地仓库没有依赖的构件时,Maven将从中央仓库中下载。

注意:中央仓库并不是囊括了所有的构件。

b). 配置

i. 在安装Maven的时候,默认配置了中央仓库为 Maven中央仓库 。该配置存在于所有Maven项目都会继承的 超级pom.xml 中,具体配置如下:

<repositories>
  <repository>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>Central Repository</name>
    <url>https://repo.maven.apache.org/maven2</url>
  </repository>
</repositories>

该配置与远程仓库的配置类似,元素的详细说明见 远程仓库-配置;超级pom的介绍详见附录;Maven中央仓库的url详见附录

ii. 国内Maven中央仓库镜像下载有时会出现下载不流畅的情况,因此选用阿里云的Maven中央仓库镜像,配置 settings.xml 如下:

<!-- mirrors
 | This is a list of mirrors to be used in downloading artifacts from remote repositories.
 |
 | It works like this: a POM may declare a repository to use in resolving certain artifacts.
 | However, this repository may have problems with heavy traffic at times, so people have mirrored
 | it to several places.
 |
 | That repository definition will have a unique id, so we can create a mirror reference for that
 | repository, to be used as an alternate download site. The mirror site will be the preferred
 | server for that repository.
 |-->
<mirrors>
  <mirror>
    <id>nexus-aliyun</id>
    <name>nexus-aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
</mirrors>

03-C 远程仓库

a). 简介

远程仓库是开发人员自己定制的仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

如果所需的构件不存在于本地仓库和中央仓库,那么Maven的构建过程将被停止并将错误消息输出到Maven控制台。为避免这种情况,将在远程仓库中提供这些私有构件。

远程仓库分为:01.私服,02.公共仓库

b). 配置

在 pom.xml 中添加JBoss远程仓库如下:

<project>
  <repositories>
	<repository>
	  <id>jboss</id>
	  <name>JBoss Repository</name>
	  <url>http://repository.jboss.org/nexus/content/groups/public/</url>
	  <releases>
	    <updatePolicy>daily</updatePolicy><!-- never,always,interval n,daily -->
	    <enabled>true</enabled>
	    <checksumPolicy>warn</checksumPolicy><!-- fail,ignore,warn -->
	  </releases>
	  <snapshots>
	    <enabled>false</enabled>
	  </snapshots>
	  <layout>default</layout>
	</repository>
  </repositories>
</project>

出于安全方面的考虑,有时我们要对远程仓库的访问进行认证,一般将认证信息配置在settings.xml中:

<settings>
  <servers>
    <server>
      <!-- 这是server的id(注意不是用户登陆的id),该id与repository元素中的id相匹配 -->
      <id>same with repository id in pom</id>
      <username>username</username>
      <password>pwd</password>
    </server>
  </servers>
</settings>

更多配置及其含义详见, 附录

附 02. Maven依赖

maven到底是如何从仓库中解析构件的呢?

a-1. 当依赖的范围是system时, Maven直接从本地仓库解析构件

b-1. 根据依赖坐标计算仓库路径后, 尝试直接从本地仓库寻找构件, 如果发现相应构件, 则解析成功; 在本地仓库不存在相应构件的情况下:

b-2. 如果依赖的构件版本是发布版本, 则遍历所有的远程仓库, 发现后下载使用

b-3. 如果依赖的构件版本是RELEASELATEST, 则基于更新策略读取所有远程仓库的元数据, 将其与本地仓库的对应元数据合并后,

       计算出RELEASE或者LATEST的真实值, 然后基于这个真实值检查本地仓库

b-4. 如果依赖的构件版本是SNAPSHOT, 则基于更新策略读取所有远程仓库的元数据, 将其与本地仓库的对应元数据合并后,

       得到最新快照版本的值, 然后基于该值检查本地仓库或从远程仓库下载

b-5. 如果依赖的构件版本是时间戳格式的快照, 则复制其时间戳格式的文件 至 非时间戳格式, 并使用该非时间戳格式的构件

注: 一定要记得<release><enabled> & <snapshot><enabled>, 对于快照也是一样.  在POM的依赖声明的时候不推荐使用LATEST & RELEASE,

在Maven3中也不再支持在插件配置中使用LATEST & RELEASE, 如果不设置插件版本, 那么最终版本和release一样, maven只会解析最新的发布版本构建。

附 03-B. 中央仓库

A. Maven的中央资源库:Maven center repository

http://repo1.maven.org/maven2/

http://repo2.maven.org/maven2/

https://repo.maven.apache.org/maven2

B. Maven中央储存库:maven center repository search

Maven中央储存库的目录浏览功能现已不能使用,不过其提供了搜索功能。

https://mvnrepository.com/

C. Maven的超级pom

所有的maven项目都会继承超级pom,包含继承默认值。它可以帮助开发人员指定最低配置的详细信息写在 pom.xml 中, 但是配置可以很容易被覆盖。

一个简单的方法来看看超级POM的默认配置,通过运行下面的命令:mvn help:effective-pom 。已经创建了一个 超级pom.xml 在D:\develop\maven\spurpom\ 文件夹中。

D:\develop\maven\spurpom> mvn help:effective-pom

附 03-C. 远程仓库

在settings.xml中配置远程仓库, 如下:

<settings>
  <profiles>
    <profile>
      <repositories>                  
        <!-- 需要连接到目标远程仓库的信息 -->
        <repository>                      
          <!-- 远程仓库唯一标识 -->
          <id>codehausSnapshots</id>                      
          <!-- 远程仓库名称 -->
          <name>Codehaus Snapshots</name>                      
          <!-- 如何处理远程仓库里发布版本的下载 -->
          <releases>                          
            <!-- true或者false表示:该仓库是否开启下载某种构件的发布版(快照版)  -->
            <enabled>false</enabled>                          
            <!-- 更新发生的频率(Maven会比较本地POM和远程POM的时间戳), 选项如下:-->
            <!-- always(一直), daily(每日,默认), interval:X(这里X是以分钟为单位的时间间隔), never(从不) -->
            <updatePolicy>always</updatePolicy>                          
            <!-- 当Maven验证构件校验文件失败时该怎么做: -->
            <!-- ignore(忽略), fail(失败), warn(警告,默认) -->
            <checksumPolicy>warn</checksumPolicy>                             
          </releases>                      
          <!-- 如何处理远程仓库里快照版本的下载. 有了 releases 和 snapshots 这两组配置, POM就可以在每个单独的仓库中, 为每种类型的构件采取不同的策略。-->
          <!-- 例如, 可能有人会决定只为开发目的开启对快照版本下载的支持. 参见repositories/repository/releases元素 -->
          <snapshots>                              
            <enabled />
            <updatePolicy />
            <checksumPolicy />                             
          </snapshots>                      
          <!-- 远程仓库URL,按protocol://hostname/path形式  -->
          <url>http://snapshots.maven.codehaus.org/maven2</url>                      
          <!-- 用于定位和排序构件的仓库布局类型: default(默认), legacy(遗留) -->
          <!-- Maven 2为其仓库提供了一个默认的布局;然而,Maven 1.x有一种不同的布局。我们可以使用该元素指定布局是default(默认)还是legacy(遗留)。  -->
          <layout>default</layout>                        
        </repository>                   
      </repositories>
    </profile>
  </profiles>
</settings>

settings.xml配置详解: (包含 本地仓库, 中央仓库, 远程仓库, 代理, profile )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值