• 详解Maven的setting配置文件中mirror和repository的区别


    • proxy是服务器不能直接访问外网时需要设置的代理服务,不常用
    • server是服务器要打包上传到私服时,设置私服的鉴权信息
    • repository是服务器下载jar包的仓库地址
    • mirror是用于替代仓库地址的镜像地址

    仓库(repository)

    repository就是个仓库,maven里有两种仓库,本地仓库和远程仓库。 远程仓库相当于公共的仓库,大家都能看到。
    本地仓库是你本地的缓存副本,只有你看的到,主要起缓存作用。
    当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。如果有则直接返回,否则会向远程仓库请求,并被缓存到本地仓库。
    远程仓库既可以在setting.xml中配置也可以在工程的pom.xml文件里指定。

    镜像(mirror)

    简单而言,mirror可以拦截对远程仓库的请求,改变对目标仓库的下载地址。 mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。
    当maven需要到的依赖jar包不在本地仓库时,就需要到远程仓库下载,这个时候如果maven的setting.xml中配置了镜像,而且镜像配置的规则中匹配到目标仓库时,maven就直接去镜像中配置的仓库地址进行依赖jar的下载,而不会去其他的地方进行下载。

    镜像拦截规则

    规则说明
    *匹配所有远程仓库。
    external:*匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。
    repo1,repo2匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。
    *,!repo1匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。

    常用的setting配置

    中央仓库

    这里使用阿里云公共仓库镜像,这样配置会拦截所有的jar请求,只从阿里云下载jar包

    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    公司有自己的私服,怎么办呢
    使用镜像拦截,jar包请求先拦截请求阿里云,找不到再去私有仓库服务器

    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*,!myrepository</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    <profiles>
    <profile>  
      <id>dev</id>
      <repositories>
        <repository>
          <id>myrepository</id>
          <url>http://******/repository/maven-public/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
          </snapshots>
        </repository>
      </repositories>
    </profile> 
    </profiles>
    
    <activeProfiles>
      <activeProfile>dev</activeProfile>
    </activeProfiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    snapshots更新策略

    在公司内部测试,一般需要实时更新到最新的snapshots包

    在repository节点增加如下配置,可以保证每次编译都保证可以获取到最新的包。

    <snapshots>
      <enabled>true</enabled>
      <updatePolicy>always</updatePolicy>
    </snapshots>
    
    • 1
    • 2
    • 3
    • 4

    或者

    修改打包命令,添加-U参数,如:mvn clean install package -U -DskipTests=true,-U参数的含义是update-snapshots,保证可以更新快照包

  • 相关阅读:
    【数学建模】MATLAB入门教程:插值与拟合(下)
    vue使用tinymce(新增字数限制)
    java PipedReader类、PipedWriter类
    数据结构与算法:括号生成
    Git基本指令
    文件上传与安全狗
    Cat1模组蓄“光”发展,广和通全场景助力光伏行业零碳发电
    C#设计模式学习总结
    中高级Java程序员,你不得不掌握的基本功,挑战20k+
    elementplus如何实现dialog遮罩层外的元素可以被操作点击
  • 原文地址:https://blog.csdn.net/m0_51527921/article/details/126580563