赞
踩
remote repository:相当于公共的仓库,大家都能访问到,一般可以用 URL 的形式访问
local repository:存放在本地磁盘的一个文件夹,例如,windows 上默认是 C:\Users\{用户名}\.m2\repository目录
私服:内网自建的 maven repository,其URL是一个内部网址
其他公共仓库:其他可以互联网公共访问 maven repository,例如 jboss repository 等
repository 里存放的都是各种 jar 包和 mave n插件。
当向仓库请求插件或依赖的时候,会先检查 local repository,如果 local repository 有则直接返回,否则会向 remote repository 请求,并缓存到 local repository。
也可以把做的东西放到本地仓库,仅供本地使用;或上传到远程仓库,供大家使用。
maven仓库的优先级顺序 - 格物致知的个人页面 - OSCHINA - 中文开源技术交流社区
在 maven 中,仓库可以分为:本地仓库、远程仓库。 远程仓库可以分为:中央仓库、私服仓库。 中央仓库是 maven 官方指定的仓库,可以理解为 “寻找的最后一站”。 私服仓库可以是自己建的,也可以是其它主体建的 (比如 aliyun 的 maven 仓库,jboss 的 maven 仓库等)。私服可以分为:全局应用的私服仓库、应用到项目自身的私服仓库。 maven 寻找得顺序大致可以理解为: 1,在本地仓库中寻找,如果没有则进入下一步。 2,在全局应用的私服仓库中寻找,如果没有则进入下一步。 3,在项目自身的私服仓库中寻找,如果没有则进入下一步。 4,在中央仓库中寻找,如果没有则终止寻找。 补充: 1,如果在找寻的过程中,如果发现该仓库有镜像设置,则用镜像的地址代替。 2,如果仓库的 id 设置成 “central”,则该配置会覆盖 maven 默认的中央仓库配置。
mirror相当于一个拦截器,它会拦截 maven 对 remote repository 的相关请求,把请求里的 remote repository 地址,重定向到 mirror 里配置的地址。
此时,B Repository被称为A Repository的镜像。
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都胡够从它的镜像中获取。
<mirrorOf></mirrorOf>
标签里面放置的是要被镜像的 Repository ID。为了满足一些复杂的需求,Maven 还支持更高级的镜像配置:
<mirrorOf>*</mirrorOf>
:匹配所有远程仓库
<mirrorOf>repo1,repo2</mirrorOf>
:匹配仓库 repo1 和 repo2,使用逗号分隔多个远程仓库。
<mirrorOf>*,!repo1</miiroOf>
: 匹配所有远程仓库,repo1 除外,使用感叹号将仓库从匹配中排除。
其实,mirror 表示的是两个 Repository 之间的关系,在 maven 配置文件(setting.xml )里配置了<mirrors><mirror>..........</mirror></mirrors>
,即定义了两个 Repository 之间的镜像关系。
配置两个 Repository 之间的镜像关系,一般是出于访问速度和下载速度考虑。
例如, 有一个项目,需要在公司和住所都编码,并在项目 pom.xml 配置了A Maven 库。
这时,在住所的 setting.xml 里,只要配置一下<mirrors><mirror>....</mirror></mirrors>
,让 B 库成为 A 库的 mirror,即可不用更改项目 pom.xml 里对于 A 库的相关配置。
如果该镜像仓库需要认证,则配置 setting.xml 中的 <server></server>
即可。
需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候, Maven 仍将无法访问被镜像仓库,因而将无法下载构件。
私服是一种特殊的远程 Maven 仓库,它是架设在局域网内的仓库服务,私服一般被配置为互联网远程仓库的镜像,供局域网内的 Maven 用户使用。
当 Maven 需要下载构件的时候,先向私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,同时缓存在私服之上,然后为 Maven 下载请求提供下载服务,另外,对于自定义或第三方的jar可以从本地上传到私服,供局域网内其他 maven 用户使用。
优点主要有:
①、节省外网宽带 ②、加速Maven构建、③、部署第三方构件、
④、提高稳定性、增强控制:原因是外网不稳定
⑤、降低中央仓库的负荷:原因是中央仓库访问量太大
PS:Maven仓库示意图
有的时候需要的仓库在 maven setting.xml 没有配置,用的很少,不想在 setting.xml 中配置,那么可以直接配置在 pom.xml 文件中,如下配置
- <repositories>
- <repository>
- <repository>
- <id>activiti-repos</id>
- <name>Activiti Repository</name>
- <url>https://maven.alfresco.com/nexus/content/groups/public</url>
- </repository>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- </repositories>
- <pluginRepositories>
- <pluginRepository>
- <id>aliyun-plugin</id>
- <url>https://maven.aliyun.com/repository/public</url>
- </pluginRepository>
- </pluginRepositories>
在 pom.xml 中,经常会看到代码仓库中的某些项目版本以 release 或 snapshots 结尾
开发标准:snapshots 版本代表正在开发中的版本,release 代表比较稳定的发布版本.
对于上面的 <repositories></repositories>
releases=true、snapshots=false,表示只会去仓库查找稳定版本,不回去查找开发中的版本
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。