最近利用Maven框架搭建了一个Springboot应用,应用依赖于公司内部仓库镜像,但是公司的镜像不全,导致无法实现某些功能,比如实现Spring boot优雅的停止(依赖spring-boot-starter-actuator.jar,后面博客会详解)。本篇博客提供了两种方案实现上述问题。
1. Maven指定settings.xml
由于其他项目使用的仍是公司镜像,因而不能直接去修改settings.xml。我们只需要新建一个settings2.xml,并在使用的时候指定settings2.xml即可。同时还需要添加一下新的配置的仓库(/Users/guweiyu/.m2/repository2),避免覆盖原仓库。
<localRepository>/Users/guweiyu/.m2/repository2</localRepository>
1.1 IDEA指定settings.xml
在编辑器中直接可视化修改
选择Maven->修改路径“User setting files”和“Local repository”
1.2 Maven命令行指定settings.xml
利用maven命令打包时直接指定settings.xml
mvn clean -U install --settings /Users/guweiyu/.m2/settings2.xml -Dmaven.test.skip=true
2. Maven配置多仓库镜像
上述方案虽然很好的解决maven指定settings.xml和实现本地仓库迁移问题。但是无法解决多仓库镜像问题:应用存在大部分jar包依赖于公司内部仓库镜像,少数jar包依赖于外部镜像仓库。下面详解maven如何配置多仓库镜像问题。
要求公司仓库镜像为主,阿里云镜像仓库为辅。
2.1 在settings.xml中显示配置主从多仓库镜像
两个仓库镜像在settings.xml中配置如下:
<mirror>
<id>96nexus</id>
<mirrorOf>*</mirrorOf>
<name>96nexus</name>
<url>http://172.18.64.96:8080/nexus/content/groups/public/</url>
</mirror>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>nexus-aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
以上配置,当maven发现所需的jar包在公司内部镜像中没有时,会自动到阿里云镜像中下载。
但是上述配置mirrorOf的配置语义让人很难理解,语义中应该中央仓库为主,其他为辅,但上述实际配置中反而以*为主。
2.2 在pom.xml中配置个性化仓库镜像
将公司的仓库镜像作为中央仓库配置在settings.xml中,而阿里云仓库镜像作为远程仓库直接配置在maven工程的pom.xml中。具体如下:
- 将settings.xml中公司内部镜像修改为:
<mirror>
<id>96nexus</id>
<mirrorOf>central</mirrorOf>
<name>96nexus</name>
<url>http://172.18.64.96:8080/nexus/content/groups/public/</url>
</mirror>
- 在pom.xml中添加阿里云镜像仓库
<repository>
<id>nexus-aliyun</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
在上述配置中中央仓库镜像(主要)配置在settings.xml中,其他个性化或者特殊镜像(次要,可能项目有关)配置在工程的pom.xml中