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举例。

相关推荐
小手cool1 天前
Java 列表中查找最小值和最大值最有效率的方法
java
王锋(oxwangfeng)1 天前
企业出海网络架构与数据安全方案
网络·架构·自动驾驶
惊讶的猫1 天前
多线程同步问题及解决
java·开发语言·jvm
wfsm1 天前
工厂模式创建动态代理实现类
java·开发语言
好好研究1 天前
总结SSM设置欢迎页的方式
xml·java·后端·mvc
Hui Baby1 天前
java -jar 启动原理
java·pycharm·jar
weixin_511255211 天前
更新jar内资源和代码
java·jar
木井巳1 天前
【递归算法】验证二叉搜索树
java·算法·leetcode·深度优先·剪枝
不当菜虚困1 天前
windows下HSDB导出class文件报错【java.io.IOException : 系统找不到指定的路径。】
java·开发语言
小马爱打代码1 天前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端