maven 仓库 repositories 和 mirrors 的配置及区别

本文深入探讨Maven仓库配置的优先级与工作原理,包括settings_mirror、pom_repositories等配置项的作用,以及如何通过配置mirrorOf实现仓库镜像,提高依赖下载效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

maven 仓库配置

settings_mirror 看如下两种情况定优先级

  • mirror 匹配 * 则其他配置都不起作用,以镜像配置为准
  • mirror 匹配 某个repository的id 则搜索此库时执行镜像代理

settings_mirror配置不存在

  • pom_repositories 优先级高于 central
  • settings_profile_repo 优先级高于 pom_repositories
  • settings_profile_repo 优先级高于 pom_profile_repo
  • pom_profile_repo 优先级高于 pom_repositories
settings_profile_repo > pom_profile_repo >pom_repositories 

settings_mirror 同时存在

  • settings_mirror 配置 *,则其它配置都不起作用,全部被代理

  • settings_mirror 配置 具体仓库id,则该仓库被镜像代理

  • settings_mirror 配置 *,!具体仓库id ,则除开该仓库都被代理

  • settings_mirror 配置 external:*,则除开本地仓库都被代理

    具体仓库id是指settings_profile_repopom_profile_repopom_repositories中的repository标签中的id标签的值

通过 mirror 配置

如果仓库 X 可以提供仓库 Y 所有的内容,那么我们就可以认为 X 是 Y 的一个镜像,通俗点说,可以从 Y 获取的构件都可以从他的镜像中进行获取。可以采用镜像的方式配置远程仓库,镜像在 settings.xml 中进行配置,在 setting.xml 中的 标签下加入如下子标签配置便配置了一个 maven 镜像。

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <!--mirrorOf的配置很重要后面会详细说明-->
    <mirrorOf>central</mirrorOf>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

添加如上配置后,maven 会读取 setting.xml 中配置的 mirror 作为 jar 包的下载地址,我们以在项目中下载 fastjson 为例来看一下效果。

可以看到,配置了上面的 mirror 后,maven 是从 aliyun 仓库下载的 jar 包,不配置的时候,默认从 apache 的 maven 中央仓库下载的 jar 包。

上面提到, 的设置很重要,比如上面我设置的 mirrorOf 为 < mirrorOf>central,如果 < mirrorOf> 我随便设置一个参数,如 < mirrorOf>abc,这时候我们配置的仓库就不起作用了,这是因为 maven 默认内置了如下一个仓库,这个默认仓库的 id 为 central,当我们把 mirrorOf 设置为 < mirrorOf>central 时,maven 就会查找有没有 id 为 central 的仓库,然后把 id 为 central 的仓库地址换成我们 < mirror > 标签配置的那个 url,这样我们配置的 mirror 才会起作用。当然我们也可以把 mirrorOf 设置为 < mirrorOf>*,表示所有仓库都使用我们配置的这个 mirror 作为 jar 包下载地址。

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

通过 配置

通过 setting.xml 方式配置会对所有 maven 项目生效,如果只想在本项目中配置一个 maven 仓库,可以通过在 pom.xml 中配置 标签来实现。在自己的 maven 项目的 pom.xml 中添加如下配置,就配置好了一个仓库。这时候,maven 会优先采用这个配置,而不会去读 setting.xml 中的配置了。这样配置好后,maven 就会自动从 aliyun 下载 jar 包了。

<repositories>
    <repository>
        <id>aliyun-releases</id>
        <name>阿里云仓库(name可以随便起)</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </repository>
</repositories>

我们知道,repositories 标签下可以配置多个 repository,如果我们配置了多个 repository,maven 会用哪个呢,答案是按出现顺序使用,如果第 1 个可用,就用第一个,如果不可用,就依次往下找,下面的 2 张图片可以说明这个问题。

上面配置 时 < id > 似乎也没什么用,确实是,如果你只是在 pom.xml 中配置个仓库,这个 id 是没什么用的,可以随便写,其实这个 id 是配合上面讲的 mirror 一块使用的,还记得 mirrorOf 吗,我们配置 mirrorOf 为 < mirrorOf>central 是,mirror 中的 url 就是 central 仓库的 url 给覆盖了,所以这里的 < repository > 标签下的 id 是给 mirrorOf 用的。

可以看下面一个例子,本来我们的 abc-releases 这个仓库是不可用的,因为根本就没有 https://abc.def.com/repository/public / 这个仓库,但是我们通过 mirror 配置,改变了 id 为 abc-releases 这个仓库的 url,从而使用 maven 也可以从 id 为 abc-releases 这个仓库下载 jar 包了。当然这样配置也没只啥意义,只是为了方便理解 repository 和 mirror 之间的关系。

maven 仓库配置的其他选项

<!--releases和snapshots中有个enabled属性,是个boolean值,默认为true,
表示是否需要从这个远程仓库中下载稳定版本或者快照版本的构建,
一般使用第三方的仓库,都是下载稳定版本的构建。-->
<repository>
    <id>aliyun-releases</id>
    <url>https://maven.aliyun.com/repository/public</url>
    <releases>
        <enabled>true</enabled>
    </releases>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
</repository>

maven 默认的内置仓库的配置位置

<!--
可以从以下文件中找到maven仓库的默认配置如下
apache-maven-3.6.1\lib\maven-model-builder-3.6.1.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>
      </snapshots>
    </repository>
</repositories>
Maven是一个开源的构建管理工具,它能够自动化构建过程依赖管理。其中,Maven仓库Maven的关键组成部分之一,用于存储各种构建依赖项,如Jar包、插件、依赖库等。在Maven中,有两个概念:仓库repositories镜像mirrors,它们在Maven中的作用不同,下面我们将分别进行介绍。 Maven仓库repositories Maven仓库repositories是指Maven默认的依赖项存储区。在Maven的构建过程中,如果在本地计算机上没有找到所需的依赖项,Maven会从repositories中查找并下载。repositories有两种类型:本地仓库远程仓库。 本地仓库是指Maven在本地计算机上缓存的依赖项存储区。当我们第一次构建项目时,Maven会自动在我们的本地仓库中创建一个默认位置,例如:~/.m2/repository。当我们需要依赖项时,Maven会首先在本地仓库中查找,如果找到,则直接使用本地仓库中的依赖项。如果本地仓库中没有找到,Maven会从远程仓库中查找。 远程仓库是指存储依赖项的远程服务器,我们可以将依赖项上传到远程仓库中,以供他人使用。Maven官方提供了一个默认的远程仓库Central Repository。当我们需要依赖项时,Maven会首先从本地仓库中查找,然后再从Central Repository中查找。 Maven默认使用的repositories中包含了Central Repository,也可以配置其他的repositories,以便于从其他的仓库中获取依赖项。 Maven镜像mirrors Maven镜像mirrors是指一个可以从其他地方复制数据的复制品。在Maven中,Mirrors是由Central Repository提供的一个特殊功能。使用Mirrors的主要目的是减少从Central Repository下载依赖项的时间。在国外,由于网络环境较好,所以使用Central Repository可以快速下载依赖项。但是,在国内如果直接访问Central Repository,由于网络原因,可能会导致下载速度非常慢,甚至是无法连接。 为了解决这个问题,Maven提供了Mirrors的功能,我们可以将Central Repository配置为一个镜像。这样,在使用Maven下载依赖项时,就会从配置的镜像中下载,而不是直接从Central Repository中下载。通过使用镜像,能够提高依赖项下载的速度,提高构建效率。 总结 Maven仓库repositories镜像mirrorsMaven构建过程中的两个重要概念。repositories用于存储依赖项,包含本地仓库远程仓库。而mirrors是借助Central Repository提供的功能,用于提高依赖项的下载速度。在配置Maven时,需要同时考虑到repositoriesmirrors配置
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值