Maven仓库

​ maven仓库分为本地仓库和远程仓库。远程仓库有中央仓库、私服、其他公共库。

本地仓库

​ 默认情况下,不管是在windows还是linux上,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。用户也可自定义本地仓库目录地址,编辑文件./m2/settings.xml,设置localRepository元素的值为想要的仓库地址。但需要注意,默认情况下,./m2/settings.xml文件是不存在的,需要到安装目录复制./conf/settings.xml文件再进行编辑。

中央仓库

​ 原始的本地仓库是空的,maven必须知道至少一个可用的远程仓库,才能下载到需要的构件。中央仓库就是这样一个默认的远程仓库。maven的安装文件自带了中央仓库的配置。打开./lib/maven-model-builder-3.x..jar,访问路径org/apache/maven/model/pom-4.0.0.xml,可以看到如下的配置:

<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <!-- enabled值为false,表示不从该仓库下载快照版本的构件 -->
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

​ 此文件是所有maven项目都会继承的超级pom。

私服

​ 即使在一台直接连入internet的个人机器上使用maven,也应该在本地建立私服。因为私服可以帮助你:

  • 节省外网宽度
  • 加速maven构建。maven的一些内部机制(如快照更新检查)要求maven在执行构建的时候不停的检查远程仓库数据。
  • 部署第三方构件。
  • 提高稳定性,增强控制。但internet不稳定时,maven就无法顺利构建。

远程仓库的配置

​ 当默认的中央仓库无法满足需求时,可能需要的构件存在于另外一个远程仓库中,如JBoss Maven仓库。这时,可以在pom中配置该仓库。

<repositories>
    <repository>
      <id>jboss</id>
      <name>JBoss Repository</name>
      <url>https://repository.jboss.com/maven2</url>
      <!-- default表示仓库的布局是maven2和maven3的默认布局,而不是maven1的布局 -->
      <layout>default</layout>
      <releases>
          <!-- 开启JBoss仓库的发布版本下载支持 -->
          <enabled>true</enabled>
      </releases>
      <snapshots>
        <!-- enabled值为false,表示不从该仓库下载快照版本的构件 -->
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

​ 对于releases和snapshots来说,处理enabled,还有两个子元素updatePolicy和checksumPolicy。

<snapshots>
    <enabled>false</enabled>
    <!-- 从远程仓库检查更新的频率,默认daily,表示每天检查一次。never-从不;always-每次构建;interval:X-每隔X分钟检查一次更新。 -->
    <updatePolicy>daily</updatePolicy>
    <!-- 检查检验和文件的策略。构件被部署到maven仓库时,会同时部署对应的校验和文件。下载时,就会验证校验和文件。此处配置检验失败的处理办法。warn-警告;fail-失败;ignore-忽略 -->
    <checksumPolicy>ignore</checksumPolicy>
</snapshots>

远程仓库的认证

​ 出于安全考虑,我们需要提供认证信息才能访问一些远程仓库,这时就需要配置认证信息。认证信息必须配置在settings.xml文件中,因为pom会被提交到代码仓库供所有成员访问,而settings.xml一般只放在本机。更为安全。

<servers>
    <server>
      <!-- 此id必须与要认证的仓库id(pom中repository元素的id)完全一致 -->
      <id>my-repository</id>
      <username>username</username>
      <password>password</password>
    </server>
</servers>

部署到远程仓库

<distributionManagement>
    <!--发布版本的构件仓库 -->
    <repository>
        <id>project-releases</id>
        <name>project releases repository</name>
        <url>http://192.168.40.240:8888/repository/maven-releases/</url>
        <layout>default</layout>
    </repository>
    <!--快照版本的构件仓库,如果没有配置该元素,默认部署到repository元素配置的仓库 -->
    <snapshotRepository>
        <id>project-snapshots</id>
        <name>project snapshots repository</name>
        <url>http://192.168.40.240:8888/repository/maven-snapshots/</url>
        <layout>legacy</layout>
    </snapshotRepository>
</distributionManagement>

​ 运行命令mvn deploy,maven就会项目构件输出到配置的远程仓库,如果项目当前的版本是快照版本,这部署到快照版本的仓库地址,否则就部署到发布版本的仓库地址。

快照版本

​ 将项目构件发布到私服时,maven会自动为构件打上时间戳。比如模块A的版本为2.1-SNAPSHOT,发布后2.1-20191212.221414-13就表示2019-12-12 22:14:14的第13次快照。当构建依赖于A的模板B时,maven会自动从仓库中检查A的2.1-SNAPSHOT的最新构件,发现有更新时便进行下载。用户可以使用命令行-U参数强制让maven检查更新,如mvn install-U。

镜像

​ 编辑settings.xml。

<mirrors>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <!-- central表示为中央仓库的镜像 -->
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

​ 关于镜像的另一个常见用法是结合私服。私服可以代理任何外部的公共仓库。可以将配置集中到私服,从而简化maven本身的配置。这种情况下,可以将mirrorof配置为*,

  • <mirrorOf>*</mirrorOf>:匹配所有的远程仓库
  • <mirrorOf>external:*</mirrorOf>:匹配所有不在本机上的远程仓库
  • <mirrorOf>repo1,repo2</mirrorOf>:匹配仓库repo1和repo2。
  • <mirrorOf>*,!repo1</mirrorOf>:匹配所有远程仓库,rpo1除外。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在Maven世界中,依赖、插件、项目构建完成后输出的jar包都可以看作是一个构件,任何一个构件都有一组坐标唯一标识...
    SonyaBaby阅读 757评论 0赞 0
  • 在 Maven 的术语中,仓库是一个位置(place)。Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫...
    41uLove阅读 7,261评论 2赞 3
  • 在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。 Maven在某个统一的位置存储所有项目的...
    三也视界阅读 2,399评论 0赞 4
  • 1.1、仓库路径 路径的构建规则与步骤为: 1、groupId的.替换成/ 2、后面加上artifactId,同样...
    噢是LJY阅读 1,074评论 0赞 1
  • 简介 Maven 可以在某个位置统一存储所有 Maven 项目共享的构件,这个统一的位置就是仓库。实际的 Mave...
    杰哥长得帅阅读 362评论 0赞 0

友情链接更多精彩内容