读书笔记 -- 《Maven实战》
前段时间Maven更新到了3.8.1版本,该版本只支持HTTPS协议仓库,公司内部升级后又需要重新将配置修改一番,然而修改过程并不容易,由于不了解Maven的配置与定位jar的关系,只能不断试错重来。想到使用Maven这么多年,每次都是直接copy别人的配置,随便改改以及替换URL,是时候好好去了解下了。
基础概念
- maven资源标识:groupId-artifactId-version-packageing-classifier,通常packageing为jar,classifier不指定。
- maven的仓库:
- 本地仓库:
${user.home}/.m2/repository
- 中央仓库:id默认为central,地址为
http://repo1.maven.org/maven2
- 聚合仓库:第三方开放的Maven仓库,如阿里云,腾讯云等提供的加速库
- 本地仓库:
这里很核心的一点:中央仓库(id=central)是一个特有的概念和定位,他是Maven资源的首要来源,central的配置在超级pom中,因此其等级是优先于聚合仓库低于本地仓库。
查找流程
整个查找流程如下图所示:
- 查找本地repository
- 查找id=central仓库,该过程会使用servers做认证,使用mirrors做拉取地址替换
- 根据release以及snapshot的配置,查找其他仓库,该过程同样使用servers以及mirrors做认证以及地址替换
如何配置合理?
从上面流程来看,Maven的配置逻辑本身很简单,但在一些公司中,Maven配置的复杂性主要来源于仓库众多,以蚂蚁为例,官方的仓库就有7个左右,新同学接手时,就很容易出现错误,那么怎么配置呢?
1. 选定中央仓库代理
中央仓库自然优先级最高,默认的http://repo1.maven.org/maven2
由于网络原因,拉取常常出现中断,因此中央仓库一般使用mirrors方式定向到国内镜像,而不是复写repository配置,比如下方我使用的阿里云仓库。
这里需要注意下<mirrorOf>
,国内很多加速库会推荐设置为*,代表代理所有仓库,这种当然是不负责的推荐配置,阿里云的public库只是central以及jcenter的聚合,并不能代替spring,gradle,jetbrain等仓库。
1 | <mirror> |
2. 使用Profile划分其他仓库
profile用于圈定一批生效仓库,比如下方我定义了一个rdc profile作为默认生效的配置,其中的repositories分别配置了私有的releases&snapshot库,如果有多个release或者snapshot,那么只需要在该配置中增加即可。如果独立环境的仓库,那么可以新建一个profile圈选,在IDE中做快捷切换。
1 | <profile> |
- 版权声明: 感谢您的阅读,本文由屈定's Blog版权所有。如若转载,请注明出处。
- 文章标题: 读书笔记 -- 《Maven实战》
- 文章链接: https://mrdear.cn/posts/readnote-maven_in_action.html