Maven笔记5-Maven仓库

    Maven仓库布局方式:groupId/artifactId/version/artifactId-version.packaging

    仓库分类:本地仓库,远程仓库(中央仓库,私服,其他公共库)

1. 本地仓库

    默认Maven创建的仓库目录为: Linux: home/fdc/.m2/repository;Windows:C:\User\Administrator\.m2\

    repository; 而自定义仓库目录地址配置为:

    编辑setting.xml文件:

    <settings>

          <localRepository>D:\java\repository\</localRepository>

    </settings>

2. 远程仓库-中央仓库

    Maven的安装文件默认配置了中央仓库的地址:http://repo1.maven.org/maven2

3. 远程仓库-私服

    私服是架设在局域网内的仓库服务,私服代码广域网上的远程仓库,共局域网内的Maven用户使用。当Maven需要

    下载构建的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存早私服上之后,再为

    Maven的下载请求提供服务。

    私服的优点:

    (1) 节省自己的外网带宽

    (2) 加速Maven构建

    (3) 部署第三方构件

    (4) 提高稳定性,增强控制

    (5) 降低中央仓库的负荷。

4. 远程仓库的配置

    (1) 远程仓库的配置

    <project>

         ...

         <repositories>

              <repository>

                  <id>jboss</id>   <!--仓库的Id,需与中央仓库的Id:central区分-->

                  <name>JBoss Repository</name>

                  <url>http://repository.jboss.com/maven2</url>

                  <release>

                       <enabled>true</enabled>

                  </release>

                  <sanpshots>

                       <enabled>true</enabled>

                       <!--配置Maven从远程仓库检查更新的频率,默认是daily即每天检查一次,其他可选值为:

                             never,always,interval: X(每个X分钟检查一次更新)-->

                       <updatePolicy>daily</updatePolicy>

                       <!--配置Maven检验文件的策略:ignore:忽略校验错误,fail:Maven在构建时会给出警告

                             信息,默认为warn.-->

                       <checksumPolicy>ignore</checksumPolicy>

                  </sanpshots>

              </repository>

         </repositories>

         ...

     </project>

    (2) 远程仓库的认证

    在settingz.xml中配置仓库认证信息:

    <settings>

        ...

        <servers>

             <server>

                  <id>jboss</id> <!--该Id需要与需要认证的仓库Id一致-->

                  <username>repo-user</username>

                  <password>repo-pwd</password>

            </server>

        </servers>

        ...

     </settings>

    (3) 部署至远程仓库

    在远程仓库中配置构件部署地址:

    <project>

         ...

         <distributionManagment>

              <repository>

                   <id>proj-release</id>

                   <name>Project Release Repository</name>

                   <url>http://192.168.1.100/content/repositories/proj-releases</url>

              </repository>

              <snapshotRepository>

                   <id>proj-snapshots</id>

                   <name>Proj Snapshot Repository</name>

                   <url>http://192.168.1.100/content/repositories/proj-snapshots</url>

              </snapshotRepository>

         </distributionManagment>

         ...

    </project>

5. 快照版本

    强制Maven检查更新:mvn  clean install -U

6. 从仓库解析依赖的机制

    当本地仓库没有依赖构件的时候,Maven会自动从远程仓库下载;当依赖版本为快照版本的时候,Maven会

    自动找到最新的快照。这背后的依赖解析机制为:

    (1) 当依赖的范围是system时,Maven直接从本地文件系统解析构件;

    (2) 根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功;

    (3) 在本地仓库不存在相应构件的情况下,如果依赖的版本是显示的发布版本构件,如1.2,,21-beta-1,则

    遍历所有的远程仓库,发现后语,下载解析使用;

    (4) 如果依赖的版本是RELEASE或者LATEST,则基于更新策略读取所有远程仓库的元数据groupId/artifactId

    /maven-metadata.xml,将其与本地仓库的对应元数据合并后,计算出RELEASE或者LATEST真实的值,然

    后基于这个真实的值检查本地和远程仓库,如步骤(2)(3);

    (5) 如果依赖的版本是SNAPSHOT,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/version

    /maven-metadata.xml,将其与本地仓库的对应元数据合并后,得到最新快照版本的值,然后基于该值检查本

    地仓库,或者从远程仓库下载;

    (6) 如果最后解析得到的构建版本是时间戳格式的快照,如:1.4.1-20091104.121450-121,则复制其时间

    戳格式的文件至非时间戳格式,如SNAPSHOT,并使用该非时间戳格式的构件。

7. 镜像

    (1) 配置中央仓库镜像

    <settings>

         ...

         <mirrors>

             <mirror>

                 <id>maven.net.cn</id>

                 <name>one of the central mirror in chaina</name>

                 <url>http://maven.net.cn/content/groups/public</url>

                 <mirrorOf>central</mirrorOf>

             </mirror>

         </mirrors>

          ...

   </settings>

   说明:mirrorOf的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像。

   (2) 配置使用私服作为镜像

   <settings>

         ...

         <mirrors>

             <mirror>

                 <id>internal-repository</id>

                 <name>Internal Repository Manager</name>

                 <url>http://192.168.1.100/maven2</url>

                 <mirrorOf>*</mirrorOf>

             </mirror>

          </mirrors>

          ...

   </settings>

   说明:mirrorOf的值为*,表示该配置是所有Maven仓库的镜像,任何对于远程仓库的请求都会被转至http:

   //192.168.1.100/mavnen2.

你可能感兴趣的:(maven)