• maven配置多仓库镜像(转)


    原文地址:maven配置多仓库镜像

    问题场景:

    1、国内访问maven默认远程中央镜像特别慢

    2、用阿里的镜像替代远程中央镜像

    3、大部分jar包都可以在阿里镜像中找到,部分jar包在阿里镜像中没有,需要单独配置镜像

    我想达到的目标:

    在maven中配置一主一副两个镜像,大部分jar直接通过主镜像可以找到,部分特殊jar在主镜像中找不到时,自动去副镜像中寻找。

    我所处的阶段:

    修改了maven的全局配置文件setting.xml(其所处位置maven的安装目录maven/apache-maven-3.3.9/conf/setting.xml):

    1、配置了本地仓库:

    1. <localRepository>D:/maven/repository</localRepository>  


    2、配置了中央仓库的镜像:(换成了阿里的)

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

    希望你也做到了这一步。并且知道了mirrorOf为什么要配置为central

    我所做的尝试:

    我想在全局配置文件setting.xml配置两个镜像,希望有主从的区别,希望maven能在大部分情况下去阿里镜像下载jar包,个别情况去附属镜像下载jar包。

    最有用的一篇博文,这位大拿翻译了maven的官网,请看连接:大拿讲Maven settings配置中的mirrorOf

    其实关键就是要搞懂mirrorOf和镜像的先后顺序

    与是我在setting.xml里对这两个主从镜像,尝试了各种mirrorOf和顺序的组合,最后发现如下配置实现了我的愿望

      <mirror>      
        <id>奇葩-mirror</id>    
        <name>奇葩-mirror</name>  
        <url>https://奇葩/repo/</url>    
        <mirrorOf>central</mirrorOf>      
      </mirror>   
      
      <mirror>      
        <id>nexus-aliyun</id>    
        <name>nexus-aliyun</name>  
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>    
        <mirrorOf>*</mirrorOf>      
      </mirror>  
     

    以上配置,当maven发现所需的奇葩jar在阿里镜像中没有时,会自动去奇葩镜像中寻找。奇葩jar的确下载下来了。

    问题解决了,但是!我觉得这样很不爽!对,你可能觉得我有强迫症,但的确是这样,我觉得很不爽,难道你不这样认为么

    maven的mirrorOf配置设计的很不科学,以上配置算解决了我的问题,但是我觉得这样的mirrorOf配置在语义上很不符合我的逻辑。

    为什么要给一个很少用到的镜像配置一个central?

    如果有大拿发现有更好的配置逻辑和语义请告诉我

    现实就是这样,当你发现可以临时解决问题时(可能是碰巧,隐患还很多),碰巧你还很忙,继续改进的动力也就止步了,是的我就认为问题到此截至了,如果我有空的话,我就改maven的源码,重写一套mirrorOf的逻辑。

    转折

    今天,我看了另一篇文章,很基础,连接在这里:很基础的知识

    于是,我有了新的想法:

    1,在全局配置文件setting.xml,只配置一个中央仓库的镜像,即mirrorOf为central的镜像只配置一个

    2、在具体项目的pom.xml文件里配置特殊的仓库

    忙里偷闲,实验一下,成功了!

    这才是很符合逻辑的配置呀,是不是觉得这样的配置很舒服。

    全局配置里就应该只配置一个中央仓库,其他的个别仓库也不应该往全局配置里配,所以不用在纠结mirrorOf的配置语义了!就一个central,简单明了!

    终极解决方案:

    同学提示我应该搭建自己的私服!这是另一个研究方向,日后再说!

    我先说我的大招(我憋了很久了):

    1、在全局配置文件setting.xml配置一个central仓库的镜像。

    2、在具体项目的pom里配置个别的仓库,如下

    <repositories>  
        <repository>  
          <id>奇葩仓库</id>  
          <url>https://奇葩仓库/public/</url>  
        </repository>  
     </repositories>  

    例如

        <repositories>
            <repository>
                <id>mvnrepository</id>
                <url>http://mvnrepository.com/</url>
            </repository>
            <repository>
                <id>repo2</id>
                <url>http://repo2.maven.org/maven2/</url>
            </repository>
        </repositories>

    大招下载页面,maven配置文件 和 pom配置文件

  • 相关阅读:
    用来验证字符串的规则引擎
    C++基本错误:
    web service传递stream二进制对象的解决方法
    安装EnterpriseLibrary4.1后遇到PresentationBuildTasks找不到的问题
    关于NHibernate示例程序QuickStart无法运行的问题
    关于iframe.document
    .NET下转换日期格式为中文大写
    History(历史)命令用法 15 例
    防火墙技术发展趋势浅析
    MIME类型大全
  • 原文地址:https://www.cnblogs.com/huanghongbo/p/8960643.html
Copyright © 2020-2023  润新知