maven的多仓库配置理解

最近在工作中,拉取一个jar包,不确定最初在maven的setting.xml配置的镜像配置能否拉取到,根据AI搜索资料得到一些启发。

场景:

我在我的maven setting.xml配置了阿里云的镜像,这是我们国内开发大多数的必要配置,原因是通过阿里云的拉取,可以加快拉取速度:

xml 复制代码
	<mirror>
  		<id>nexus-aliyun</id>
  		<mirrorOf>central</mirrorOf>
  		<name>Nexus aliyun</name>
  		<url>https://maven.aliyun.com/repository/central</url>
	 </mirror>  

在我项目的pom.xml需要拉取一些jar,发现拉取过程中提示拉取不到jar包,于是,我根据搜索到的资料再pom.xml加了仓库配置:

xml 复制代码
<repositories>
    <repository>
        <id>central-ma</id>
        <url>https://repo1.maven.org/maven2/</url>
        <releases><enabled>true</enabled></releases>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>

    <repository>
        <id>eclipse-releases</id>
        <url>https://repo.eclipse.org/content/repositories/releases/</url>
    </repository>

</repositories>

然后maven的setting.xml配置改成:

xml 复制代码
	<mirror>
  		<id>nexus-aliyun</id>
  		<mirrorOf>central,!central-ma</mirrorOf>
  		<name>Nexus aliyun</name>
  		<url>https://maven.aliyun.com/repository/central</url>
	 </mirror>  

这样一修改,理解上有所改变,接下来,对新配置点理解进行分析

xml 复制代码
	<mirror>
  		<id>nexus-aliyun</id>
  		<mirrorOf>central,!central-ma</mirrorOf>
  		<name>Nexus aliyun</name>
  		<url>https://maven.aliyun.com/repository/central</url>
	 </mirror>  

- mirror 定义了一个镜像(mirror),Maven 会把对某些仓库的请求重定向到你指定的镜像地址,从而加速下载(尤其是国内访问官方中央仓库很慢的情况下)。

  • <id>nexus-aliyun</id>:这个镜像的唯一标识符,建议唯一,通常和仓库的 id 相关联。
  • <url>https://maven.aliyun.com/repository/central</url>:真正的镜像地址,所有被镜像的请求都会重定向到这里。这是阿里云提供的 Maven 中央仓库公共镜像,速度很快。
  • <mirrorOf>central,!central-ma</mirrorOf>:这是最关键的部分,表示这个镜像代理哪些仓库。拆解一下:central:指的是 Maven 默认的中央仓库,其 id 在 super pom 中定义为 "central",地址是repo.maven.apache.org/maven2。
  • !central-ma:这里的 ! 表示排除(取反)。所以整体意思是:镜像所有 id 为 "central" 的仓库请求,把它们重定向到阿里云镜像。但排除 id 为 "central-ma" 的仓库,这个仓库的请求不会走阿里云镜像,而是走它自己原本配置的地址。

引申:

我们要明白的是,maven所有的项目都隐式继承Super POM,这是maven内置的默认配置, 在Super POM,中默认定义了一个仓库:

xml 复制代码
<repository>
  <id>central</id>
  <name>Central Repository</name>
  <url>https://repo.maven.apache.org/maven2</url>
</repository>

这是Maven Central Repository(Maven 中央仓库),全球最大的公共开源 jar 包仓库。 所以这里的central就关联上上面setting.xml mirrof的central。

当你的 pom.xml 中只声明 而没有额外配置 时,Maven 会:

  1. 先检查本地仓库(~/.m2/repository)。
  2. 如果本地没有,就去默认的 "central" 仓库下载。

具体在实际运用中,pom.xml的repositories根据使用者自由配置,可以是公司内网仓库,可以使其他仓库,我在这里是以maven的 repo1.maven.org/maven2 来配置repository举例。

相关推荐
向上的车轮19 小时前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
Dragon Wu19 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
晚霞的不甘19 小时前
CANN 编译器深度解析:TBE 自定义算子开发实战
人工智能·架构·开源·音视频
跳动的梦想家h19 小时前
环境配置 + AI 提效双管齐下
java·vue.js·spring
坚持就完事了19 小时前
Java中的集合
java·开发语言
wjhx20 小时前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
YCY^v^20 小时前
JeecgBoot 项目运行指南
java·学习
人间打气筒(Ada)20 小时前
jenkins基于Pipeline发布项目
java·pipeline·jenkins·流水线·ci·cd·cicd
程序猿追20 小时前
昇腾算力之锚:深度解读 CANN ascend-toolkit 异构计算架构与工程实践
架构
一枕眠秋雨>o<20 小时前
深入 CANN ops-nn:昇腾 NPU 算子开发的工程化实践与架构哲学
架构