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"><</span>snapshots</span><span class="token punctuation">></span></span><span class="token plain-text"> *
</span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>enabled</span><span class="token punctuation">></span></span><span class="token plain-text">false</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>enabled</span><span class="token punctuation">></span></span><span class="token plain-text"> *
</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>snapshots</span><span class="token punctuation">></span></span><span class="token plain-text"> *
</span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>id</span><span class="token punctuation">></span></span><span class="token plain-text">central</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>id</span><span class="token punctuation">></span></span><span class="token plain-text"> *
</span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>name</span><span class="token punctuation">></span></span><span class="token plain-text">Maven Repository Switchboard</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>name</span><span class="token punctuation">></span></span><span class="token plain-text"> *
</span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>url</span><span class="token punctuation">></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"></</span>url</span><span class="token punctuation">></span></span><span class="token plain-text">*
</repository> *
本地仓库默认在你本地的用户目录下的.m2/repository目录下。
mirror
mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。
比如,上班的时候在公司,用电信的网络,连的是电信的仓库。
回到家后,是网通的网络,我想连网通的仓库,就可以通过mirror配置,统一把我工程里的仓库地址都改成联通的,而不用到具体工程配置文件里一个一个地改地址。
mirror的配置在.m2/settings.xml里。如:
*<mirrors> *
- <mirror> *
- <id>UK</id> *
- <name>UK Central</name> *
- <url>**http://uk.maven.org/maven2</url>*
- <mirrorOf>central</mirrorOf> *
- </mirror> *
</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
登陆已经安装好的nexus私有仓库,如图:
点击左边菜单“Repositories”,选择右边列表“3rd party“
点击“3rd party”,选择artifact Upload,如下图:
在artifact Upload界面显示的有GAV Parameter,groupId,artifactId,Version,Packaging等等参数,界面如图:
将以上参数填完之后,选择要上传的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
maven的setting配置文件中mirror和repository的区别的更多相关文章
- Maven配置setting.xml值Mirror与Repository区别
1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository ...
- Maven的setting配置文件
一.Maven的setting配置文件 和 在Eclipse中对Maven的正确配置. 1.Maven的配置文件(Maven的安装目录/conf/settings.xml ) 和 Maven仓库下(默 ...
- springboot中@Mapper和@Repository的区别
@Mapper和@Repository是常用的两个注解,两者都是用在dao上,两者功能差不多,容易混淆,有必要清楚其细微区别: 区别: @Repository需要在Spring中配置扫描地址,然后生成 ...
- yum配置文件中baseurl和mirrorlist的区别
找到yum.repo.d文件夹下的文件,随便打开一个,找到mirrorlist的url,比如: http://mirrorlist.centos.org/?release=6&arch=$ba ...
- spring boot 中@Mapper和@Repository的区别
0--前言 @Mapper和@Repository是常用的两个注解,两者都是用在dao上,两者功能差不多,容易混淆,有必要清楚其细微区别: 1--区别 @Repository需要在Spring中配置扫 ...
- Maven:mirror和repository 区别
1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository ...
- Maven之setting.xml配置文件详解
setting.xml配置文件 maven的配置文件settings.xml存在于两个地方: 1.安装的地方:${M2_HOME}/conf/settings.xml 2.用户的目录:${user.h ...
- Maven的Mirror和Repository 的详细讲解
1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository ...
- Maven的Mirror和Repository
今天新公司入职,项目经理让迁出项目,心想maven的阿里镜像源挺快的,干脆在配置了公司私服之后自己配置了阿里的镜像源,没成想项目屡屡报错,找不到项目依赖的公司jar包,后来才发现,同事配置mirror ...
随机推荐
- hlt 与 llt 相关
HLT:HIGH LEVEL TEST,通常指SDV/SIT/SVT等测试活动SDV : system design verification 系统设计验证 SIT : system integrat ...
- 代码注入/文件包含 弹出Meterpreter
主要通过 msf 中 exploit 的 web_delivery 模块来实现此功能 0x01 前提背景 目标设备存在远程文件包含漏洞或者命令注入漏洞,想在目标设备上加载webshell,但不想在目标 ...
- Eclipse 远程开发插件 RSE 及远程登录
Eclispe 使用私钥登录远程服务器 生成私钥 Window --> Preference --> SSH2 --> Key Management --> Generate ...
- UDS的使用
我们通过对导热微分方程式的求解,并与Fluent自己的求解结果进行对比,介绍一下Fluent当中UDS(自定义标量)的具体使用方法. 首先Fluent当中的UDS主要针对下面这样形式的方程: 其中: ...
- Centos7 配置静态IP并使用xshell远程连接
静态IP配置 1.定位到 /etc/sysconfig/network-scripts文件夹,打开文件夹下面的ifcfg-enp3s0文件 2.修改BOOTPROTO=static ONBOOT=y ...
- mvel语法指南[翻译]
mvel受到了java语法的启发,但是存在一些根本性的差异,mvel旨在使其成为更有效的表达式语言.比如直接支持集合.数组和字符串匹配,正则表达式的运算操作等. mvel2.x有以下几个部分组成: ...
- PHP系列 | PHPexcel导入xls格式 ,提示错误:iconv(): Wrong charset, conversion from `CP936' to `UTF-8' is not allowed
导入xls格式(2003版本)时会报错提示错误信息 iconv(): Wrong charset, conversion from `CP936' to `UTF-8' is not allowed[ ...
- Oracle 日期各个部分常用写法
--1.日期的各部分的常用的的写法 --- --1) 取时间点的年份的写法: SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL; --结果:2019 --2) 取时间点 ...
- ES6 - 字符串的扩展(模版字符串)
模板字面量的最简单语法,是使用反引号( `)(Tab上面那个键)来包裹普通字符串,而不是用双引号或单引号. <!DOCTYPE html> <html lang="en&q ...
- 图片放大神器: waifu2x
在线版可以在这个地址上使用:http://waifu2x.udp.jp/index.zh-CN.html , 但是在线版最大图片为5M,最大上传分辨率为1500*1500,且最大放大倍数为2倍,还是有 ...




