弄懂maven仓库 & 仓库优先级 & settings & pom配置关系及差异
repository 仓库
本地仓库
本机一般 .m2
本地仓库地址可以在 settings.xml 里边指定
远程仓库
比如公司私有仓库
pom 可以通过配置多个 repository 来,如果好多项目共用的话,可以在 settings 文件配置 profile,这样新项目就不需要重复配置 repository 了
中央仓库
maven 必须至少知道一个远程仓库,中央仓库就是默认的仓库,不需要显示配置在maven 的 super pom 中配置的
兜底用的,找不到的 jar 会找它
如果中央仓库慢可以用 mirrors 来替换它,它的 id 是 central,在 mirrorOf 标签中配置它的标签就是替换了
仓库在哪里配置
可以在 settings 或者 pom.xml 中配置
可以嵌入到 profile 中,也可以单独通过 repository 配置然后 profile 通过 id 引用
谁用仓库
profile (构建) 标签会指定仓库
下载 jar 会有一个默认的搜索顺序,见 repo 优先级
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 优先级
本地仓库jar>global settings active profile> user settings active profile>pom profile>pom repo>user mirror>global mirror
pom中的repo配置高于user/global settings中的mirror
user/global settings中的activa profile高于pom中的repo
global settgings中的active profile高于user settings中的active profile
user settings active profile高于mirror(checked)
但是settings定位不同,它倾向于提供一些公共的附属信息,而不是个性化的构建信息.它会
尽量融合到你的pom中。
mirror镜像又是个什么东西
就是一个备份或冗余.并且你有的我也有并且我比你快
用镜像仓库替代默认的远程仓库
用来替代在 pom 中 repository 定义的仓库(miorrorOf 标签通过唯一的仓库 id)
maven 的中央仓库 id 是 central(在 super pom 中配置)
注意:当远程仓库被镜像匹配到的,则在获取 jar 包将从镜像仓库获取,而不是我们配置的 repository 仓库, repository 将失去作用
如果你不是以上两个目的就不用配置镜像了
mirror优先级
见 repo 优先级
pom 不支持配置
profile是个什么东西
定义构建程序的资源和配置,如: - 远程仓库列表
- 构建时本地路径及远程路径
- 唯一标志
- 自动触发逻辑
- 扩展属性列表
- 插件仓库列表
profile通过什么配置
通过profiles/profile标签配置
profile在哪里配置以及有什么区别
在settings和pom都可以配置
但是settings只能提供给pom: repository,plugin repository,以及free-form properties供pom使用
可以理解为setting的profile是对pom中的profile信息的补充以达到build的目的
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 激活方式
<activation>
<activeByDefault>trueactiveByDefault>
activation>
settings 激活方式
profile_user_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 配置规则
external:* = 不在本地仓库的文件才从该镜像获取
repo,repo1 = 远程仓库 repo 和 repo1 从该镜像获取
*,!repo1 = 所有远程仓库都从该镜像获取,除 repo1 远程仓库以外
* = 所用远程仓库都从该镜像获取
maven的中央仓库id是central, 所以mirrorOf配置为central就达到了替换maven仓库的目的
repostitory mirror profile关系
repository 就是 jar 包的库
mirror 可以替换某个 repository
profile 里面需要包含某个 repository
配置镜像仓库
在 settings.xml 全局配置
<mirrors> <mirror>
<id>aliyunid>
<name>aliyunname>
<mirrorOf>centralmirrorOf>
<url>https://maven.aliyun.com/repository/centralurl>
mirror>
mirrors>
仓库优先级(访问不通或者 jar 不存在自动切换)
见 repo 优先级
source: //www.jianshu.com/p/4ac4155b7cc3
记得点「赞」和「在看」↓
爱你们