zoukankan      html  css  js  c++  java
  • maven的setting配置文件中mirror和repository的区别

    当maven需要到的依赖jar包不在本地仓库时, 就需要到远程仓库下载 .

    这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 ,
    maven认为目标仓库被镜像了, 不会再去被镜像仓库下载依赖jar包, 而是直接去镜像仓库下载.

    简单而言, mirror可以拦截对远程仓库的请求 , 改变对目标仓库的下载地址

    repository

    repository就是个仓库.

    maven里有两种仓库,本地仓库和远程仓库。

    远程仓库相当于公共的仓库,大家都能看到。

    本地仓库是你本地的缓存副本,只有你看的到,主要起缓存作用。

    当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。

    如果有则直接返回,否则会向远程仓库请求,并被缓存到本地仓库。

    远程仓库可以在工程的pom.xml文件里指定。

    如果没指定,默认会到http://repo1.maven.org/maven2这个地方去请求插件和依赖包。

    *<repository>  *
    
    •  </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>snapshots</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">  *
      
    •  </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>enabled</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">false</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>enabled</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">  *
      
    •  </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>snapshots</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">  *
      
    •  </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">central</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">  *
      
    •  </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>name</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">Maven Repository Switchboard</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>name</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">  *
      
    •  </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">**[http://repo1.maven.org/maven2</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">*
      
    • </repository> *

    本地仓库默认在你本地的用户目录下的.m2/repository目录下。

    mirror

    mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。

    比如,上班的时候在公司,用电信的网络,连的是电信的仓库。

    回到家后,是网通的网络,我想连网通的仓库,就可以通过mirror配置,统一把我工程里的仓库地址都改成联通的,而不用到具体工程配置文件里一个一个地改地址。

    mirror的配置在.m2/settings.xml里。如:

    
    *<mirrors>  *
    
    

    </mirrors>

    这样的话,就会给上面id为central的远程仓库做了个镜像。

    以后向central这个仓库发的请求都会发到http://uk.maven.org/maven2而不是http://repo1.maven.org/maven2了。

    <mirrorOf>central</mirrorOf>里是要替代的仓库的id。

    如果填*,就会替代所有仓库。

    高级镜像配置

    为了满足一些复杂的需求,Maven还支持更高级的镜像配置:

    1.<mirrorOf>*</mirrorOf>

    匹配所有远程仓库。

    2.<mirrorOf>external:*</mirrorOf>

    匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。

    3.<mirrorOf>repo1,repo2</mirrorOf>

    匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。

    4.<mirrorOf>*,!repo1</miiroOf>

    匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。

    需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。

    例子

    个人的maven配置了阿里的镜像 , 而项目中需要使用到一些第三方jar包, 为了方便引入 , 已上传到192.168.0.201的nexus私服下.

    但由于个人maven阿里的镜像使用默认mirrorOf规则=*, 所有的仓库都被镜像 , 不会再去192.168.0.201下下载第三方jar包

    上传的第三方jar包目标路径 :
    http://192.168.0.201:8081/nexus/content/groups/public/com/alipay/sdk-java/20170615110434/sdk-java-20170615110434.pom
    被镜像后路径 :
    http://maven.aliyun.com/nexus/content/groups/public/com/alipay/sdk-java/20170615110434/sdk-java-20170615110434.pom

    所以需要修改镜像的mirrorOf规则 , 避免默认从镜像中下载

    maven的conf/setting.xml

      <mirrors>
            <!--国内阿里云提供的镜像,非常不错-->
        <mirror>
            <!--This sends everything else to /public -->
            <id>aliyun_nexus</id>
            <!--对所有仓库使用该镜像,除了一个名为maven_nexus_201的仓库除外-->
            <!--这个名为maven_nexus_201的仓库可以在javamaven项目中配置一个repository-->
            <mirrorOf>*,!maven_nexus_201</mirrorOf> 
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>
      </mirrors>
    

    maven项目下的pom.xml配置一个远程仓库

    <repositories>
            <!-- 192.168.0.201远程仓库 -->
            <repository>
                <id>maven_nexus_201</id>
                <name>maven_nexus_201</name>
                <layout>default</layout>
                <url>http://192.168.0.201:8081/nexus/content/groups/public/</url>
                <snapshots>  
                    <enabled>true</enabled>  
                  </snapshots>
            </repository>
    </repositories>
    

    http://192.168.0.201:8081/nexus下上传第三方jar包依赖

    参见 : https://jingyan.baidu.com/article/a948d6517b72eb0a2dcd2e2a.html

    1. 登陆已经安装好的nexus私有仓库,如图:

    2. 点击左边菜单“Repositories”,选择右边列表“3rd party“

    3. 点击“3rd party”,选择artifact Upload,如下图:

    4. 在artifact Upload界面显示的有GAV Parameter,groupId,artifactId,Version,Packaging等等参数,界面如图:

    5. 将以上参数填完之后,选择要上传的jar包,点击”add artifact“,最后点击”save“保存按钮即可,如下图所示:

    maven项目下的pom.xml引入依赖

    <dependency>
        <groupId>com.alipay</groupId>
        <artifactId>sdk-java</artifactId>
        <version>20170615110434</version>
    </dependency>
    
    原文地址:https://www.jianshu.com/p/274c363ffd7c
  • 相关阅读:
    3. 操作系统优化
    Linux 目录
    2. 系统的目录结构
    1. 系统管理以及操作命令
    7. 流程控制之for循环
    6. 流程控制之while循环
    我的第一篇博客园随笔
    H5自带进度条&滑块
    DIV水平方向居中的几种方法
    vue入门--简单嵌套路由的一个路径小问题
  • 原文地址:https://www.cnblogs.com/jpfss/p/12001831.html
Copyright © 2011-2022 走看看