一文弄懂 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(构建)标签会指定仓库
下载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}

<!-- 
  1. env.X: 在一个变量前加上"env."的前缀,会返回一个shell环境变量。例如,"env.PATH"指代了$path环境变量(在Windows上是%PATH%)。 
  2. project.x:指代了POM中对应的元素值。例如: <project><version>1.0</version></project>通过${project.version}获得version的值。 
  3. settings.x: 指代了settings.xml中对应元素的值。例如:<settings><offline>false</offline></settings>通过 ${settings.offline}获得offline的值。 
  4. Java System Properties: 所有可通过java.lang.System.getProperties()访问的属性都能在POM中使用该形式访问,例如 ${java.home}。 
  5. x: 在<properties/>元素中,或者外部文件中设置,以${someVar}的形式使用。
  ex.   <user.install>${user.home}/our-project</user.install>
 -->

注:如果该profile被激活,则可以在pom.xml中使用${user.install}。

profile中Repositories

远程仓库列表,它是maven用来填充构建系统本地仓库所使用的一组远程仓库。

远程仓库唯一标志/名称
release/snapshots配置
远程仓库url

pluginRepositories

maven插件的仓库

activeProfiles

手动激活profiles的列表,配置的是在pom中配置的profile的id
按照profile被应用的顺序定义activeProfile

不管在哪里配置的profile都记得要激活
pom激活fangshi :

<activation>
    <activeByDefault>true</activeByDefault>
</activation>

settings激活方式:

<activeProfiles>
    <activeProfile>
      profile_user_settings
    </activeProfile>
</activeProfiles>

与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>aliyun</id>
        <name>aliyun</name>
        <mirrorOf>central</mirrorOf>
        <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
</mirrors>

仓库优先级(访问不通或者jar不存在自动切换)

见repo优先级

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容