关于maven:聊聊maven指定version区间的妙用

2次阅读

共计 1307 个字符,预计需要花费 4 分钟才能阅读完成。

前言

在咱们开发微服务项目的过程中,难免会依赖各种 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 区间的确能缩小咱们一些配置的工作量,然而凡事都有两面性,如果版本之间存在不兼容状况下,最好还是具体指定版本

正文完
 0