背景:Jenkins 迁移服务器后,maven 编译 Java 项目报错 Cannot resolve xxxxx
在 maven 的配置文件 setting.xml 中已经配置了 aliyun 仓库,配置如下:
<mirror>
<id>aliyun maven</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
但是该依赖包又不在 aliyun 仓库,其实开发在 pom.xml 是指定了依赖包的仓库地址的,因为以上的配置将所有依赖包的下载都拦截,转到了阿里云,关键就在于 mirroOf
的配置。
以下是关于 mirrorOf
字段的配置
* = 表示拦截所有请求,使用该仓库
external:* = 表示本地仓库的中没有的依赖才会使用该仓库
central = 表示拦截去中央仓库的请求,使用该仓库
# setting.xml不做任何配置时就是使用的中央仓库,也就是maven官方仓库https://repo.maven.apache.org/maven2
*,!repo_id = 除repo_id这个依赖包外,其他依赖都是用该仓库
repo1,repo2 = 表示只有 repo1 和 repo2 的依赖包才会使用该仓库,会代替pom的配置
开发在 pom 中是配置了依赖包的指定仓库的,如下
<repository>
<id>getui-nexus</id>
<url>http://mvn.gt.igexin.com/nexus/content/repositories/releases/</url>
</repository>
如果此时 getui-nexus 依赖包无法下载,报错 Cannot resolve com.gexin.platform:gexin-rp-sdk-http:4.1.1.4
,修改 maven 配置文件。
<!-- 在maven安装目录下的conf/setting.xml -->
<mirror>
<id>aliyun maven</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>*,!getui-nexus</mirrorOf> <!-- 关注这条即可,与pom中的id对应 -->
</mirror>
此时再进行构建,下载 getui-nexus 依赖包则不会从阿里云仓库下载,会从项目的pom里面找仓库下载