maven添加mirror_Maven 多仓库和镜像配置

本文介绍了如何在Maven中配置多仓库和镜像,以解决依赖下载问题。当公司内部仓库不包含所有依赖时,可以配置外部仓库,并通过mirrorOf设置镜像规则。文中列举了不同配置示例,包括在settings.xml中配置多个repository和mirror,以及如何选择和切换镜像。
摘要由CSDN通过智能技术生成

之前看 Maven 书的时候对于 Maven 本地配置没有好好研究。这下闲下来从 GitHub 上拉了一个项目来,发现使用单一的 mirror 仓库无法找到一些 jboss 的依赖,所以想起来研究一下 Maven 多仓库和镜像相关的配置。

都知道在 $HOME/.m2/settings.xml 中配置了 Maven 在本地的全局配置,可能对于某些公司内网,已经配置了公司或者内部私有的镜像。但是如果遇到镜像的中央仓库部分依赖不存在的情况,其实就需要依赖外部的仓库。

使用单一仓库

可能对于大部分的公司来说,强制使用了内网提供的单一仓库,force maven 使用单一仓库,mirror 所有请求到单一仓库。这个时候就要求这个单一仓库需要包含所有需要的 artifacts,或者需要设置代理去请求其他仓库,否则 maven 可能找不到某些构建。要做到单一仓库,设置 mirrorOf 到 *.

maven 2.0.5+ 以上版本支持:

...

internal-repository

Maven Repository Manager running on repo.mycompany.com

http://repo.mycompany.com/proxy

*

...

记住这里的 mirrorOf 中配置的星号 ,表示匹配所有的 artifacts,也就是 everything 使用这里的代理地址。这里的 mirrorOf 如果配置了具体的名字,指的是 repository 的名字,继续往下看。

multiple repository config

设置多仓库有两种方法,第一种直接在项目层级 POM 中定义:

...

my-repo1

your custom repo

https://maven.aliyun.com/repository/public

my-repo2

your custom repo

https://maven.aliyun.com/repository/public

...

这里的 id 就是 mirrorOf 要使用的 ID。

第二种方法是在 ~/.m2/settings.xml 文件中全局修改。

...

...

myprofile

my-repo2

your custom repo

https://maven.aliyun.com/repository/public

...

...

myprofile

...

别忘了激活 profile,或者也可以使用 mvn 参数来指定:

mvn -Pmyprofile ...

这里提供一下 jboss 官方的配置

jboss

jboss-public-repository-group

JBoss Public Maven Repository Group

https://repository.jboss.org/nexus/content/groups/public-jboss/

default

true

never

true

never

jboss-public-repository-group

JBoss Public Maven Repository Group

https://repository.jboss.org/nexus/content/groups/public-jboss/

default

true

never

true

never

设置镜像 {$mirror}

设置镜像的作用是为了加快依赖包的下载速度,理论上来说如果一个仓库 B 可以提供仓库 A 所有的内容,那么可以认为 B 是 A 的一个镜像,比如说 阿里提供了很多仓库的镜像 使用这些镜像可以提高下载速度。

mirror

external:*,!repo

nexus repository

https://maven.aliyun.com/repository/public

配置说明:

id: 镜像的唯一标识

mirrorOf: 指定镜像规则,什么情况下从镜像仓库拉取,官方文档

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

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

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

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

name: 名称描述

url: 地址

使用场景

Maven 设置中的 mirror 和 repository 概念比较容易混淆,一般来说 repository 用来配置远程仓库的地址,mirror 则是作为中央仓库的镜像配置。

所以,当我的需求是,比如在内部远程仓库无法找到依赖时,从外部仓库中下载。那么我要做的就是配置多个 repository,那么当 maven 寻找依赖时就会按照配置的 repository 从上往下依次尝试下载。

aliyun

aliyun

https://maven.aliyun.com/repository/public

true

true

aliyun

https://maven.aliyun.com/repository/public

true

true

nexus-163

nexus-163

Nexus 163

http://mirrors.163.com/maven/repository/maven-public/

default

false

true

nexus-163

Nexus 163

http://mirrors.163.com/maven/repository/maven-public/

false

true

jboss

jboss-public-repository-group

JBoss Public Maven Repository Group

https://repository.jboss.org/nexus/content/groups/public-jboss/

default

true

never

true

never

jboss-public-repository-group

JBoss Public Maven Repository Group

https://repository.jboss.org/nexus/content/groups/public-jboss/

default

true

never

true

never

aliyun

jboss

archiva.internal

username

archiva.snapshots

username

mirror 与 repository 不同的是,假如配置同一个 repository 多个 mirror 时,相互之间是备份关系,只有当仓库连不上时才会切换到另一个,而如果能连上但是找不到依赖时是不会尝试下一个 mirror 地址的。

reference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值