问题描述
在使用 maven 项目下载依赖包的时候,总提示jar包在仓库中找不到,后发现是由于project 工程中 pom 配置的公司自己的 maven仓库地址未被识别到,只读取了 settings 配置文件中的地址。
问题排查:
maven的setting文件配置信息如下:
<mirrors>
<mirror>
<id>Central</id>
<url>https://repo1.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>aliNexus</id>
<mirrorOf>*</mirrorOf>
<name>aliNexus</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
pom.xml中的配置:
<repositories>
<repository>
<id>local-nexus</id>
<url>${maven.host}/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
为什么明明在POM中配置了仓库地址,但是下载包的时候却不识别呢,原因就在于 settings 文件中 mirror 的配置问题,如下所示:
<mirror>
<id>aliNexus</id>
<mirrorOf>*</mirrorOf>
<name>aliNexus</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
mirrorOf 标签,这个标签如果设置为 *,就说明整个工程只能使用settings中配置的地址,这就是问题的根源。
解决办法
在settings文件的mirrorof 标签中内容改成 !local-nexus,* ,如下:
<mirror>
<id>aliNexus</id>
<mirrorOf>!local-nexus,*</mirrorOf>
<name>aliNexus</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
!local-nexus 意思是把 local-nexus 这个仓库排除在外,依然把公司的仓库作为唯一仓库,这样就可以使 settings文件中配置的仓库和pom.xml配置的仓库都生效。