一文弄懂 maven 仓库, 仓库优先级, settings pom配置关系及差异
repository仓库
本地仓库
本机,一般.m2 本地仓库地址可以在settings.xml里边指定
远程仓库
比如公司私有仓库 pom可以通过配置多个repository来,如果好多项目共用的话,可以在settings文件配置profile,这样新项目就不需要重复配置repository了
中央仓库
maven必须至少知道一个远程仓库,中央仓库就是默认的仓库,不需要显示配置在maven的 super pom中配置的 兜底用的,找不到的jar会找他
如果中央仓库慢可以用mirrors来替换它,它的id是central,在mirrorOf标签中配置它的标签就是替换了
仓库在哪里配置
可以在settings OR pom xml中配置 可以嵌入到profile中,也可以单独通过repository配置然后profile通过id引用
谁用仓库
profile(构建)标签会指定仓库
server和repository如何关联
通过distributionManagement标签根据id关联起来
依赖仓库的配置方式
- 中央仓库,这是默认的仓库
- 镜像仓库,通过 sttings.xml 中的 settings.mirrors.mirror 配置
- 全局profile仓库,通过 settings.xml 中的 settings.repositories.repository 配置
- 项目仓库,通过 pom.xml 中的 project.repositories.repository 配置
- 项目profile仓库,通过 pom.xml 中的 project.profiles.profile.repositories.repository 配置
- 本地仓库
依赖优先级关系由近(本地仓库)及远(中央仓库)
强烈注意: 你的maven的环境变量会覆盖一切. 当你发现你修改settings不生效的时候,检查下你的maven home配置
repo优先级
mirror镜像又是个什么东西
就是一个备份或冗余.并且你有的我也有并且我比你快 用镜像仓库替代默认的远程仓库
用来替代在pom中repository定义的仓库(miorrorOf标签通过唯一的仓库id) maven的中央仓库id是central(在super pom中配置)
注意:当远程仓库被镜像匹配到的,则在获取 jar 包将从镜像仓库获取,而不是我们配置的 repository 仓库, repository 将失去作用
如果你不是以上两个目的就不用配置镜像了
mirror优先级
见repo优先级 pom不支持配置
profile是个什么东西
profile通过什么配置
profile在哪里配置以及有什么区别
profile相关标签说明
Activation
自动触发/激活profile的条件逻辑 不是激活profile的唯一方式,还可以通过命令行-P yourWantedtoActiveProfile,anotherProfiletoActive
可以配置自动激活条件特别多,具体参考文档 mvn help:active-profiles
properties
对profile的扩展,配置一些属性值${x}
注:如果该profile被激活,则可以在pom.xml中使用${user.install}。
profile中Repositories
远程仓库列表,它是maven用来填充构建系统本地仓库所使用的一组远程仓库。
远程仓库唯一标志/名称 release/snapshots配置 远程仓库url
pluginRepositories
maven插件的仓库
activeProfiles
手动激活profiles的列表,配置的是在pom中配置的profile的id 按照profile被应用的顺序定义activeProfile
不管在哪里配置的profile都记得要激活 pom激活fangshi :
settings激活方式:
与pom中profile的区别与联系
settings.xml中的profile元素是pom.xml中profile元素的裁剪版本 它包含了id、activation、repositories、pluginRepositories和properties元素。 这里的profile元素只包含这五个子元素是因为这只关心构建系统这个整体
如果一个settings.xml中的profile被激活,它的值会覆盖任何其它定义在pom.xml中带有相同id的profile。 settings的profile一般是个pom的profile提供补充信息, 一般是公共的,适合所有项目的
settings文件是个什么东西
从settings.xml的文件名就可以看出,它是用来设置maven参数的配置文件。并且, settings.xml是maven的全局配置文件。而pom.xml文件是所在项目的局部配置。 Settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。
settings.xml文件位置
settings.xml文件一般存在于两个位置: 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: 𝑢𝑠𝑒𝑟.ℎ𝑜𝑚𝑒/.𝑚2/𝑠𝑒𝑡𝑡𝑖𝑛𝑔𝑠.𝑥𝑚𝑙𝑛𝑜𝑡𝑒:
settings和pom之间的关系
settings偏向于全局配置 一般pom的优先高于settings,但是他们之间的信息是相互引用的
Servers是个什么东西
如果需要用户名和密码就需要配置下server,不适合放在pom中,一般定义在settings中,由pom去引用
仓库的下载和部署是在pom.xml文件中的repositories和distributionManagement元素中定义的。
server如何跟repository关联
该 id 与 distributionManagement 中 repository 元素的 id 相匹配
repository/profile 标签
profile可以再settings和pom中配置 repository无法单独在settings中配置,不报错不生效,但是可以配置到profile中
repository和profile的关系
profile会用到repository repository也可以单独配置
settings和pom优先级
要看具体标签来定 profile是settings的优先级最高 见repo优先级
settings和pom之间的关联
一般是pom会取用setttings中的配置 settings一般全局和公共的配置
Mirrors
用来替代某个仓库的,一般替代中央仓库,但是不局限于替代它.可以替代一切仓库 mirrorOf来指定仓库id,这个id是pom文件中 repository 的id
mirrofOf标签
mirrofOf在哪配置
mirrorOf配置内容含义是什么
mirrorOf 标签里面放置的是 repository 配置的 id,为了满足一些复杂的需求,Maven还支持更高级的镜像配置
mirrorOf配置规则
maven的中央仓库id是central, 所以mirrorOf配置为central就达到了替换maven仓库的目的
repostitory,mirror,profile关系
repository就是jar包的库 mirror可以替换某个repository profile里面需要包含某个repository
配置镜像仓库
在settings.xml 全局配置
仓库优先级(访问不通或者jar不存在自动切换)
见repo优先级