首页 > 其他分享 >聊聊maven指定version区间的妙用

聊聊maven指定version区间的妙用

时间:2024-02-27 09:59:44浏览次数:19  
标签:妙用 1.0 1.1 maven version SNAPSHOT 版本 2.0

前言

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

标签:妙用,1.0,1.1,maven,version,SNAPSHOT,版本,2.0
From: https://www.cnblogs.com/linyb-geek/p/17833996.html

相关文章

  • I recommend a very small Linux, it is Watt OS version 13
    Dearall,MyfirsttimeusingLinuxWattOSversion12,itisverynice. Superfast!However,fornewusers,youneedthesecommandtostart:sudopasswdsudodate--setmm/dd/yyyysudoaptinstallgdebiItisworthytostudythesecommandline,because......
  • Jenkins流水线使用@Grab 导入Maven库
    有个需求需要在pipeline中调用Java的SDK去执行业务使用@Grab注解可以在Maven中导入Java库,@Grab('org.apache.commons:commons-math3:3.4.1')importorg.apache.commons.math3.primes.Primes引入依赖后,在通过import导入另外的写法@Grab(group='org.springframework',mod......
  • maven使用systemPath方式加载本地jar(代码库)
    比如,jar包直接放到根目录 pom.xml里这么配置<dependency><groupId>njcanc</groupId><artifactId>njcanc</artifactId><version>2.12</version><scope>system</scope><systemPath>${project.b......
  • vue页面上显示package.json中的version
    在Vue项目中,你可以使用process.env来访问构建时注入的环境变量,包括package.json中的某些字段。但是,process.env通常不会直接包含package.json的所有内容。不过,你可以通过构建脚本将version字段注入到环境变量中。以下是如何在Vue项目中获取package.json中的version字段的步骤:在......
  • vue项目npm run build的时候自动更新package.json中的version
    在vue项目最外侧新增一个addVersion.js 脚本,脚本中编写逻辑来解析当前的版本号//addVersion.jsconstfs=require('fs');constpath=require('path');constpackageJsonPath=path.join(__dirname,'package.json');try{//读取package.json......
  • JavaFlink系列之一:Maven程序搭建及Java入门案例多种写法
    JavaFlink系列之一:Maven程序搭建及Java入门案例多种写法 一、Flink项目依赖配置<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://maven.apache.org/POM/4.0.0"......
  • 安装IntelliJ IDEA Ultimate Version 2018.3.6
    参考博客:idea2018.3.6安装与破解教程1、下载安装文件ideaIU-2018.3.6.exe2、无脑下一步安装博主安装位置D:\IntelliJIDEA2018.3.6安装后,先不要运行IDEA3、下载jar文件JetbrainsIdesCrack-4.2-release.jar将下载后的jar包放入到IDEA安装目录的bin目录下,即D:\Inte......
  • VS中任务列表的妙用
    VisualStudio/VS中任务列表的妙用一、任务列表开启方法首先说下开启的方法:视图-任务列表,即可打开任务列表。快捷键Ctrl+'\'+T,熟练了可以快速开启。注意,'\'键是回车键上面的’’,不要按成了'/'二、任务列表标签设置设置的方法:工具-选项-环境-任务列表。内置有三种,如TODO、UND......
  • Maven 换源
    ~/.m2/settings.xml<?xmlversion="1.0"encoding="UTF-8"?><!--LicensedtotheApacheSoftwareFoundation(ASF)underoneormorecontributorlicenseagreements.SeetheNOTICEfiledistributedwiththisworkforadditional......
  • Go语言精进之路读书笔记第34条——了解channel的妙用
    c:=make(chanint)//创建一个无缓冲(unbuffered)的int类型的channelc:=make(chanint,5)//创建一个带缓冲的int类型的channelc<-x//向channelc中发送一个值<-c//从channelc中接收一个值x=<-c//从channelc接收一个值并......