当前位置: 首页 > news >正文

Maven 多仓库和多镜像配置

Maven是一个流行的Java项目构建和管理工具。在Maven中,我们可以配置多个仓库源来下载和管理依赖项。同时,我们还可以使用repositories和mirrors进行配置,以满足特定的需求。
首先,让我们了解一下repositories和mirrors的作用。在Maven的Setting配置中,repositories和mirrors都用于配置远程仓库的地址。其中,repository直接配置站点地址,而mirror则作为站点的镜像,代理某个或某几个站点的请求,实现对repository的完全代替。

要配置多个仓库源,有两种形式可供选择:配置多个profile或在一个profile中配置多个repository。配置多个profile时,需要额外配置activeProfiles使配置生效。这样,在下载依赖时,Maven会按照配置从上到下的顺序,依次尝试从各个地址下载,成功下载为止。无论是配置国内的Maven仓库,还是配置Nexus等私服,都可以直接配置成repository。这样即使配置的这些仓库有些问题导致一些包下不下来,也可以继续用别的仓库尝试。

接下来,我们来看一下如何使用mirror进行配置。mirror作为站点的镜像,可以代理某个或某几个站点的请求。我们可以将mirror配置为对某个repository的完全代替。在Mirrors部分可以配置多个镜像仓库,但是在该部分配置多个仓库并不能提供自动查询多个仓库的功能,默认还是取第一个仓库进行查询。为了达到这个目的,我们可以采用设置profiles的方式进行配置。

下面是一个示例配置:

<profiles>
<profile>
<id>my-profile</id>
<repositories>
<repository>
<id>repo1</id>
<url>http://repo1.example.com/maven2/</url>
</repository>
<repository>
<id>repo2</id>
<url>http://repo2.example.com/maven2/</url>
</repository>
</repositories>
<mirrors>
<mirror>
<id>mirror1</id>
<mirrorOf>repo1</mirrorOf>
<url>http://mirror1.example.com/maven2/</url>
</mirror>
<mirror>
<id>mirror2</id>
<mirrorOf>repo2</mirrorOf>
<url>http://mirror2.example.com/maven2/</url>
</mirror>
</mirrors>
</profile>
</profiles>

在上述示例中,我们通过设置多个repository和mirror来配置多个仓库源。其中,repository标签下的id表示仓库的唯一标识符,url表示仓库的地址。mirror标签下的id表示镜像的唯一标识符,mirrorOf表示要代理的repository的id,url表示镜像的地址。通过这种方式,我们可以实现对多个仓库源的灵活配置和管理。
总结:在Maven中配置多个仓库源时,可以使用repositories和mirrors进行配置。repositories直接配置站点地址,而mirrors作为站点的镜像,代理某个或某几个站点的请求。通过设置多个profile或在一个profile中配置多个repository来配置多个仓库源。同时,使用mirror可以实现镜像仓库的配置,以满足特定的需求。通过灵活运用这些配置方式,我们可以更好地管理依赖项和解决依赖问题。

maven 设置多个仓库

有两种不同的方式可以指定多个存储库的使用。第一种方法是在 POM 中指定要使用的存储库。这在构建概要文件内部和外部都支持

<project>
...<repositories><repository><id>my-repo1</id><name>your custom repo</name><url>http://jarsm2.dyndns.dk</url></repository><repository><id>my-repo2</id><name>your custom repo</name><url>http://jarsm2.dyndns.dk</url></repository></repositories>
...
</project>

另一种指定多个存储库的方法是在${user.home}/.m2/settings.xml或者 ${maven.home}/conf/settings.xml文件中 新建 profile信息 如下:

<settings>...<profiles>// 第一个仓库地址<profile><id>nexus</id><repositories><repository><id>my-repo2</id><name>your custom repo</name><url>http://jarsm2.dyndns.dk</url></repository></repositories></profile>// 第二个仓库地址<profile><id>aliyun</id><repositories><repository><id>aliyun</id><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>aliyun</id><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories></profile>      </profiles><activeProfiles><activeProfile>nexus</activeProfile><activeProfile>aliyun</activeProfile></activeProfiles>...
</settings>

如果您在profiles 中指定 repository 存储库,需要激活该特定profiles,我们通过在 activeProfiles 中进行配置

你也可以通过执行以下命令来激活这个配置文件:

mvn -Pnexus ...

正常maven 的settings.xml配置完成profiles之后,可以在idea中进行切换

设置镜像

镜像 相当于拦截机。它拦截 maven 对远程存储库的请求,将请求中的远程存储库地址重定向到镜像中配置的地址。它主要提供了一个方便的方式来切换远程仓库地址。镜像地址按照配置文件中的顺序执行。例如,在公司工作时,使用电信网络,连接到电信仓库。当我回家的时候,是联通的网络。我想连接联通的仓库。我可以通过镜像配置将我的项目的仓库地址变成联通,而不是在特定的项目配置文件中逐个地改变地址

<settings>...<mirrors><mirror><id>aliyun</id><name>Maven Repository Manager running on repo.mycompany.com</name><url>http://repo.mycompany.com/proxy</url><mirrorOf>*</mirrorOf></mirror></mirrors>...
</settings>

配置说明:

id: 镜像的唯一标识

mirrorOf: 指定镜像规则,什么情况下从镜像仓库拉取,mirrorOf表示要代理的repository的id

        •*: 匹配所有,所有内容都从镜像拉取

        •external:*: 除了本地缓存的所有从镜像仓库拉取

        •repo,repo1: repo 或者 repo1 ,这里的 repo 指的仓库 ID

        •*,!repo1: 除了 repo1 的所有仓库

name: 名称描述

url: url表示镜像的地址

示列: 针对aliyun 仓库进行设置镜像重定向到镜像中配置的地址

  <mirrors><mirror><id>aliyun</id><mirrorOf>aliyun</mirrorOf><name>ppd mirror</name><url>http://repo.mycompany.com/proxy</url></mirror></mirrors>

这个时候会发现 虽然 repository 配置的是正确aliyun 地址,但是由于mirror镜像拦截的原因重定向新的url.

mirrors 与profiles 设置repository的区别

mirror 与 repository 不同的是,假如配置同一个 repository 多个 mirror 时,相互之间是备份关系,只有当仓库连不上时才会切换到另

一个,而如果能连上但是找不到依赖时是不会尝试下一个 mirror 地址的

相关文章:

  • 红宝书第四十七讲:Node.js服务器框架解析:Express vs Koa 完全指南
  • 408 计算机网络 知识点记忆(9)
  • 【今日三题】添加字符(暴力枚举) / 数组变换(位运算) / 装箱问题(01背包)
  • 阿里云短信服务与ASP.NET对接实例
  • 21、c#中“?”的用途
  • TDengine 语言连接器(R语言)
  • 【QT】常用控件 【多元素类 | 容器类 | 布局类】
  • 【n8n docker 部署的代理问题】解决n8n部署无法访问openai等外国大模型厂商的api
  • 入门-C编程基础部分:5、变量
  • MyBatis-Plus 中BaseMapper接口是如何加速微服务内部开发的?
  • 在ubuntu20.04+系统部署VUE及Django项目的过程记录——以腾讯云为例
  • HADOOP——序列化
  • 高并发多级缓存架构实现思路
  • 施磊老师基于muduo网络库的集群聊天服务器(一)
  • 微软承认Win11出现极端错误,只能强制关机或重装系统
  • typescript html input无法输入解决办法
  • 《Not All Tokens Are What You Need for Pretraining》全文翻译
  • 二进制和docker两种方式部署Apache pulsar(standalone)
  • Flink运行时架构
  • Vue3 nextTick
  • 平谷重庆网站建设/实时疫情最新消息数据
  • perl 动态网站开发/海外广告投放公司
  • 复兴专业做网站/自媒体引流推广
  • 吴江住房城乡建设局网站/今日足球赛事分析推荐
  • 西宁市网站设计企业/成都官网seo厂家
  • 深圳个性化网站建设公司电话/广告平台网站有哪些