maven中如何配置多个仓库使其同时生效

场景

有一个项目,我把代码跟本地maven依赖包从同事那里拷贝过来,然后打包却一直打不了,一直报aliyun仓库找不到这个依赖的错误,无论我改成引用本地仓库还是线上aliyun仓库都不行。

依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.1.0.M1</version>
        </dependency>

原因

就是因为openfeign2.1.0.M1版本并不是Central(中央仓库)里的,而是Spring Milestones里的,而现在我的settings.xml中只配置了拉取Central仓库,所以对于Spring Milestones里面的依赖包肯定是拉取失败的。

Central、Spring Milestones、ICM的区别

如下图所示:https://mvnrepository.com中一共三种仓库。
Central:中央仓库,托管了大量的开源库及其依赖,可靠性和稳定性高,发布的库经过验证。
Spring Milestones:包含了Spring项目的最新进展,可能具有新特性但未经充分测试,可能会有不稳定的情况出现,不适合在生产环境中使用
ICM:并不是一个通用的公共Maven仓库,通常用于企业内部,以减少对外部网络的依赖或满足安全要求。

在这里插入图片描述

解决

1、修改settings.xml文件,同时支持两个仓库。

<mirrors>
    <mirror>
        <id>aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

    <mirror>
        <id>spring-milestones</id>
        <name>Spring Milestones Repository</name>
        <url>https://repo.spring.io/milestone</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>


<profiles>
    <profile>
      <id>aliyun</id> 
      <repositories>
        <repository>
          <id>aliyun</id> 
          <url>https://maven.aliyun.com/repository/public</url> 
          <releases>
            <enabled>true</enabled>
          </releases> 
          <snapshots>
            <enabled>false</enabled> 
          </snapshots>
        </repository>
      </repositories>
    </profile>

   <profile>
        <id>spring-milestones</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <repositories>
            <repository>
                <id>spring-milestones</id>
                <url>https://repo.spring.io/milestone</url>
                <layout>default</layout>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
    </profile>
</profiles>   

<!--激活profile,activeProfile元素中指定profile的id-->
<activeProfiles>
  <activeProfile>aliyun</activeProfile>
  <activeProfile>spring-milestones</activeProfile>
</activeProfiles>

2、mvn clean install还是报错。

Could not transfer metadata commons-fileupload:commons-fileupload/maven-metadata.xml from/to spring-milestones (https://repo.spring.io/milestone): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

原因:spring-milestones仓库在下载包的时候遇到了SSL证书验证问题。

3、修改settings.xml文件,spring-milestones仓库的profile跳过SSL认证。

   <profile>
        <id>spring-milestones</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <repositories>
            <repository>
                <id>spring-milestones</id>
                <url>https://repo.spring.io/milestone</url>
                <layout>default</layout>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <!--跳过SSL认证-->
                <transportOptions>
                    <transportOption>http.nonProxyHosts=repo.spring.io</transportOption>
                    <transportOption>maven.wagon.http.ssl.insecure=true</transportOption>
                    <transportOption>maven.wagon.http.ssl.allowall=true</transportOption>
                </transportOptions>
            </repository>
        </repositories>
    </profile>

4、mvn clean install还是报错,没有跳过SSL认证,跟第2步报的错一样。
5、通过命令的形式来跳过SSL认证。

直接执行:mvn clean install -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true

6、执行后,过一会无论Central依赖包还是Spring Milestones依赖包,都可以下载成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值