前言
在咱们开发微服务项目的过程中,难免会依赖各种jar,开发环境可能援用1.0.0-SNAPSHOT,而到了正式环境,则须要援用1.0.0。之前咱们的做法是通过pom配置profile来达到不同环境,应用不同的版本。形如下
<profiles>
<!-- 开发环境 -->
<profile>
<properties>
<user-api.version>1.0.0-SNAPSHOT</user-api.version>
</properties>
<activation>
<!-- 指定默认环境 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 生产环境 -->
<profile>
<id>prod</id>
<properties>
<properties>
<user-api.version>1.0.0</user-api.version>
</properties>
</profile>
</profiles>
直到某一天,忘了在哪个开源的pom,看到了形如下写法
<dependency>
<groupId>com.github.lybgeek</groupId>
<artifactId>lybgeek</artifactId>
<version>[1.0,2.0]</version>
</dependency>
一开始还认为是啥jar那么特立独行,版本号居然是[1.0,2.0],前面理解了一下,才晓得的本人的无知,同时也关上新世界大门
注释
[1.0,2.0]这个到底是啥?
这个代表其实就是一个version区间,示意的意思是,该区间的版本都是可用版本,默认取最新的版本,即2.0。其余的区间配法示例
(,1.0] x <= 1.0
[1.0] x = 1.0 跟间接指定1.0没有区别
[1.2,1.3] 1.2 <= x <= 1.3
[1.0,2.0) 1.0 <= x < 2.0
[1.5,) x >= 1.5
(,1.0],[1.2,) x <= 1.0 or x >= 1.2
(,1.1),(1.1,) x < 1.1 or x > 1.1 即排除1.1的版本
注: x为具体应用的版本号。默认状况下,同版本的快照版本会小于非快照版本
[1.0-SNAPSHOT,1.0] 如果1.0不存在则应用1.0-SNAPSHOT,1.0存在则应用1.0版本
[1.0,1.0-SNAPSHOT] 谬误,会提醒:Reason: Range defies version ordering
有了这个认知后,咱们在依赖其余jar时,就能够指定形如下
<dependency>
<groupId>com.github.lybgeek</groupId>
<artifactId>user-api</artifactId>
<version>[1.0.0-SNAPSHOT,1.0.0]</version>
</dependency>
比方开发环境没有1.0.0版本,则会援用1.0.0-SNAPSHOT,而正式环境有1.0.0则会引1.0.0
总结
maven version区间的确能缩小咱们一些配置的工作量,然而凡事都有两面性,如果版本之间存在不兼容状况下,最好还是具体指定版本
发表回复