zoukankan      html  css  js  c++  java
  • 2.1 maven配置多镜像地址

    背景:

      自己在平时写项目用的是阿里的镜像地址,而在开发公司的项目是用的是公司提供的镜像地址,这就导致了每次使用的时候

    都需要来回的修改maven的settings.xml文件,这样很容易出错,而且还浪费时间;

    需求:希望能够不改动配置文件的情况下,动态切换mirror配置;

    分析:

      在maven的配置文件setting.xml大里面有个mirrors节点,用来配置镜像URL。mirrors可以配置多个mirror,每个mirror有id,name,url,mirrorOf属性,

    id是唯一标识一个mirror,name节点名,url是官方的库地址,mirrorOf代表了一个镜像的替代位置,例如central就表示代替官方的中央库。

    虽然mirrors可以配置多个子节点,但是它只会使用其中的一个节点,即默认情况下配置多个mirror的情况下,只有第一个生效,只有当前一个mirror

    无法连接的时候,才会去找后一个;而我们想要的效果是:当a.jar在第一个mirror中不存在的时候,maven会去第二个mirror中查询下载,但是maven不会这样做!)。

    那么maven是使用哪个mirror节点的呢?

    默认:mirror不是按settings.xml中写的那样的顺序来查询的,即所谓的第一个并不一定是最上面的那个。

       当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,所以不管怎么排列,
               一定会先找到A这个mirror来进行查找,当A无法连接,出现意外的情况下,才会去B查询。

    注意:

       配置多个mirror时,mirrorOf不能配置" * "," * " 的意思就是(根据mirrorOf和repository的id)匹配所有的仓库(repository),

    这样就是说如果你需要某个jar,他会从镜像地址去下载这个jar。不管你配置了多少个库,即使这些库的地址不一样,仍然会从镜像地址访问。

    解决办法:

      settings.xml 中可以使用变量,可以尝试使用变量解决:

    <!-- mirror
         | Specifies a repository mirror site to use instead of a given repository. The repository that
         | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
         | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
         |
        <mirror>
    -->
                  <!-- 唯一标识一个mirror -->
          <id>mirrorId</id>
          <!-- 代表这个镜像的替代位置,例如central就表示替代官方的中央仓库。我们可以将这个地方设置为变量,然后通过手动指定变量地方式动态切换mirror -->
          <!-- mirrorOf指定这个镜像是针对哪个repository的,配置成*就表示要代理所有repository的请求 -->
          <mirrorOf>repositoryId</mirrorOf>
          <!-- 名字(个人感觉这个name作用主要是给自己识别用,因为id已经在当前xml中唯一指定了一个mirror) -->
          <name>Human Readable Name for this Mirror.</name>
          <!-- 官方仓库库的地址 -->
          <url>http://my.repository.com/repo/path</url>
        </mirror>

    实例:

    <mirrors>
      <mirror>
        <id>aliyun</id>
        <url>https://maven.aliyun.com/repository/public</url>
        <mirrorOf>${aliyun}</mirrorOf>
      </mirror>
      <mirror>
        <id>netease</id>
        <url>http://mirrors.163.com/maven/repository/maven-public/</url>
        <mirrorOf>${netease}</mirrorOf>
      </mirror>
       <mirror>
        <id>default</id>
        <url>http://ip/nexus/repository/maven-public/</url>
        <mirrorOf>central</mirrorOf>
      </mirror>
    </mirrors>

    切换命令:

    配置多个mirror的情况下,默认只有第一个生效。因此我们可以把最后一个作为默认值,前面配置的使用环境变量动态切换。
    默认执行: mvn help:effective-settings可以看到使用的是最后一个
    切换阿里镜像执行mvn help:effective-settings -Daliyun=central即可
    同理,切换网易mvn help:effective-settings -Dnetease=central

    参考:Maven 的 settings.xml 配置中的mirror节点

          maven的setting配置文件中mirror和repository的区别

       Maven settings配置中的mirrorOf

       maven动态切换mirror,无需修改settings.xml 

          maven 中配置多个mirror的问题

  • 相关阅读:
    VBS控制鼠标移动和点击(附源代码下载)
    用VBS控制鼠标的实现代码(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击)
    vbs鼠标方法——模拟鼠标按键
    vbs 获取当前目录的实现代码
    如何在VBS脚本中显示“选择文件对话框”或“选择目录对话框”
    loadrunner使用socket协议来实现客户端对服务器产生压力实例。(通过发送心跳包,达到连接多个客户端的目的)
    loadunner使用socket协议来实现多客户端连接同一服务器脚本(使用到IP欺骗技术)
    Loadrunner中参数和变量的使用
    LoadRunner学习知多少--IP欺骗使用
    Linux下tar bz gz等压缩包的压缩和解压
  • 原文地址:https://www.cnblogs.com/shiyun32/p/10703496.html
Copyright © 2011-2022 走看看