Maven:mirror和repository区别
1 Repository(仓库)
1.1 Maven仓库主要有2种:
remote repository:相当于公共的仓库,⼤家都能访问到,⼀般可以⽤URL的形式访问
local repository:存放在本地磁盘的⼀个⽂件夹,例如,windows上默认是C:\Users\{⽤户名}\.m2\repository⽬录
1.2 Remote Repository主要有3种:
私服:内⽹⾃建的maven repository,其URL是⼀个内部⽹址
其他公共仓库:其他可以互联⽹公共访问maven repository,例如 jboss repository等
repository⾥存放的都是各种jar包和maven插件。当向仓库请求插件或依赖的时候,会先检查local repository,如果local repository有则直接返回,否则会向remote repository请求,并缓存到local repository。也可以把做的东西放到本地仓库,仅供本地使⽤;或上传到远程仓库,供⼤家使⽤。
2 Mirror
mirror相当于⼀个,它会拦截maven对remote repository的相关请求,把请求⾥的remote repository地址,重定向到mirror⾥配置的地址。
2.1 没有配置mirror:
2.2 配置mirror:
此时,B Repository被称为A Repository的镜像。
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的⼀个镜像。换句话说,任何⼀个可以从仓库Y获得的构件,都胡够从它的镜像中获取。
2.3 <mirrorOf></mirrorOf>
<mirrorOf></mirrorOf>标签⾥⾯放置的是要被镜像的Repository ID。为了满⾜⼀些复杂的需求,Maven还⽀持更⾼级的镜像配置:<mirrorOf>*</mirrorOf>
匹配所有远程仓库。
<mirrorOf>repo1,repo2</mirrorOf>
匹配仓库repo1和repo2,使⽤逗号分隔多个远程仓库。
<mirrorOf>*,!repo1</miiroOf>
匹配所有远程仓库,repo1除外,使⽤感叹号将仓库从匹配中排除。
3 Repository与Mirror
3.1 定义
其实,mirror表⽰的是两个Repository之间的关系,在maven配置⽂件(l)⾥配置了<mirrors><mirror>..........</mirror></mirrors>,即定义了两个Repository之间的镜像关系。
3.2 ⽬的
配置两个Repository之间的镜像关系,⼀般是出于访问速度和下载速度考虑。
例如,有⼀个项⽬,需要在公司和住所都编码,并在项⽬l配置了A Maven库。在公司,是电信⽹络,访问A库很快,所以maven管理依赖和插件都从A库下载;在住所,是⽹通⽹络,访问A库很慢,
但是访问B库很快。这时,在住所的l⾥,只要配置⼀下
<mirrors><mirror>....</mirror></mirrors>,让B库成为A库的mirror,即可不⽤更改项⽬l⾥对于A库的相关配置。
如果该镜像仓库需要认证,则配置l中的<server></server>即可。
3.3  注意
需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停⽌服务的时候,Maven仍将⽆法访问被镜像仓库,因⽽将⽆法下载构件。
4 私服
私服是⼀种特殊的远程Maven仓库,它是架设在局域⽹内的仓库服务,私服⼀般被配置为互联⽹远程仓库的镜像,供局域⽹内的Maven⽤户使⽤。
当Maven需要下载构件的时候,先向私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,同时缓存在私服之上,然后为Maven 下载请求提供下载服务,另外,对于⾃定义或第三⽅的jar可以从本地上传到私服,供局域⽹内其他maven⽤户使⽤。
maven下载教程
优点主要有:
1. 节省外⽹宽带
2. 加速Maven构建
3. 部署第三⽅构件
4. 提⾼稳定性、增强控制:原因是外⽹不稳定
5. 降低中央仓库的负荷:原因是中央仓库访问量太⼤
PS:Maven仓库⽰意图