大多数人都不知道的 Maven 版本号

花名提莫 2020-10-21 10:43:08 ⋅ 182 阅读

前言

大多数程序员或多或少会有这样的苦恼经历

开发了一个公共组件 maven 版本号为: 1.0.0

然后很多项目都用了这个项目的版本号

过了一段时间发现有bug,或者需要在组件中增加些代码,版本号升级到1.0.1

OMG 用到的项目都需要升级版本号, 有没有什么办法升级这些项目都可以自动用到1.0.1 呢

Maven版本号其实支持范围设置

范围规范

范围 含义
1.0 通常使用的明确指定版本号1.0
(,1.0] 版本号 <= 1.0
(,1.0) 版本号 < 1.0
[1.0] 版本号 == 1.0
[1.0,) 版本号 >= 1.0
(1.0,) 版本号 > 1.0
(1.0,2.0) 1.0 < 版本号 < 2.0
[1.0,2.0] 1.0 <= 版本号 <= 2.0
(,1.0],[1.2,) 版本号 <= 1.0 或者 版本号 >= 1.2. 多个用逗号分隔
(,1.1),(1.1,) 版本号 != 1.1

 

当Maven在版本参考中遇到多个匹配项时,它将使用匹配度最高的版本。通常,版本引用应仅按要求进行特定定义,以便Maven可以在适当的情况下自由选择依赖关系的新版本,但知道何时必须使用特定版本。如果在传递依赖关系图中的不同点上指定了依赖关系且使用了不同的版本,则Maven可以选择最合适的版本。当发生这样的冲突时,Maven从所有引用中选择最高版本。

给定使用版本范围的选项,您可能想知道使用SNAPSHOT版本是否仍然有用。尽管您可以通过使用版本范围表达式来获得某些相同的结果,但是由于以下原因,SNAPSHOT在连续构建系统中的效果更好:

  • Maven工件存储库管理器比下一个版本范围更有效地处理SNAPSHOT。由于单个工件一天可以部署多次,因此存储库维护的唯一实例的数量可以非常迅速地增加。

  • 非SNAPSHOT发行版本旨在无限期维护。如果您不断发布新版本并增加内部版本号或版本,则存储需求可能很快变得难以管理。存储库管理器旨在丢弃较旧的SNAPSHOT,以便为新实例腾出空间,因此所需的存储量保持不变。

  • SNAPSHOT也被Maven和Maven的发行过程所认可,这在执行发行版本时为您提供了一些好处。

其他特殊符号

RELEASE

如果版本号配置为RELEASE ,那么用本地MAVEN_REPOSITORY/groupid/artifactid/maven-metadata.xml,与服务器的maven-metadata.xml合并,会使用最大的release版本版本号

举例,这种情况就会使用最大release版本号2.5.2,而不是2.5.3-snapshot,因为2.5.3-snapshot是快照版本不是发布版本,应该尽量避免使用RELEASE,因为版本是不稳定的。

SNAPSHOT

snapshot版本与release,略微不同,它比较的是lastUpdated,哪个新就下载哪个,所以如果版本号是x.x.x-SNAPSHOT,肯定会更新下来。

LATEST

最新版本,则是发布版和快照中,最新的版本,所以,如果version配置为latest,则版本也不是稳定的。

 

参考文献

  1. 官方文档: https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html
  2. https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN402

Version Range Specification

The RequireMavenVersion and RequireJavaVersion rules use the standard Maven version range syntax with one minor change for ease of use (denoted with *):

Range Meaning
1.0 x >= 1.0 * The default Maven meaning for 1.0 is everything (,) but with 1.0 recommended. Obviously this doesn't work for enforcing versions here, so it has been redefined as a minimum version.
(,1.0] x <= 1.0
(,1.0) x < 1.0
[1.0] x == 1.0
[1.0,) x >= 1.0
(1.0,) x > 1.0
(1.0,2.0) 1.0 < x < 2.0
[1.0,2.0] 1.0 <= x <= 2.0
(,1.0],[1.2,) x <= 1.0 or x >= 1.2. Multiple sets are comma-separated
(,1.1),(1.1,) x != 1.1

 


全部评论: 0

    我有话说:

    你可能知道CRUD

      本系列旨在系统学习提升Mysql技能,更完整内容可以参考阿里新零售数据库设计与实战 DB引擎 你可能知道CRUD INSERT 情况一 Duplicate key 当批量更新,如果

    「蘑菇街技术」每个想听技术解析--Netty

    高山,而Netty却是照亮山路明灯。大多数没有深...

    面试官:HashMap为什么是线程安全

    一直以来只是知道HashMap是线程安全,但是到底HashMap为什么线程安全?

    Google技术:你了解Google最新发布JS代码规范 最佳实践

    Google为了那些还熟悉代码规范发布了一个JS代码规范。其中列出了编写简洁易懂代码所应该做最佳实践。

    Redis系列四 GEO附近

    GEO算法 GeoHash是一种地址编码方法。将二维空间经纬度数据编码成一个字符串; 地球上经度范围:[-180, 180],纬度范围:[-90,90]。如果以本初子午线、赤道为界,地球可以

    Apache Maven 3.8.1 发布,项目管理和构建工具

    Apache Maven 3.8.1 发布了。Apache Maven 是一个项目管理和构建工具。基于项目对象模型(POM)概念, Maven 可以从中心位置管理项目构建、报告和文档

    Nodejs 接入 公众【逗比版】

    Nodejs 接入 公众 需求:Boss: 我们要接入公众,你看下文档对接下。Me: 🆗 然后,可能因为对腾讯反感,加之网上对腾讯吐槽,怀着愤世嫉俗态度胡乱找资源,看方案

    2019优质技术公众汇总

    推荐几款技术公众新秀

    【hammerspoon】被埋没超强自动化神器

    hammerspoon这种神器用?有点奇怪

    WebSocket一次了解,附GitHub地址

    初次接触 WebSocket 会问同样问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?

    smart-http 1.0.18 发布,轻量级国产 HTTP 服务器

    smart-http 是一款采用 Java 语言编写 Http 服务器,有别于业界知名 Web容器:Tomcat、Undertow,smart-http 并支持 Servlet 规范,但对于

    「转载」Redis 到底是怎么实现“附近”这个功能

    Redis,结合其有序队列zset以及geohash编码,实现了空间搜索功能,且拥有极高运行效率。

    Cookie 和Session难,一个是Mapkey,一个是Mapvalue

    本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有一个更深入了解,并对自己开发工作中灵活运用带来启示。

    老板要我开发一个简单工作流引擎

    第1关 一天,老板找到我,说要做个简单工作流引擎。 我查了一天啥是工作流,然后做出了如下版本: 按顺序添加任意个审批组成一个链表,最后加一个结束节点 记录当前审批,当审批完后,审批向后

    【轻阅读】为什么越来越多系统在做服务化?

    脱离业务实际情况架构是耍流氓,所以是所有系统必须服务化,也不要为了服务化而服务化。

    微软桌面开发团队成员称:会将Windows迁移到Linux

    Canonical 桌面团队成员 Hayden Barnes 发表个人观点称,他认为微软会将 Windows 迁移到 Linux。   近段时间以来,微软积极融合 Linux 举措

    IntelliJ IDEA 2021.1 首个 Beta 版本发布

    经过了近五周 EAP 版本更新后,IntelliJ IDEA 2021.1 终于发布了首个 Beta 版本。 主要更新亮点: 支持 Java 16 支持打开存储在 WSL 2 中 Maven

    「千万级秒杀架构」千万级并发流量下,如何将流量串行化?

    流量串行化,是指在高并发场景下通过排队方式将无序并发流量整理成有序串行流量。大家知道在 Redis 集群部署模式出现之前,市面上大多数 Redis 是采用一主多从模式,写操作全部是由主