maven 指定version不生效的问题

 更新时间:2022年01月18日 15:05:47   作者:zx1323  
这篇文章主要介绍了maven 指定version不生效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

maven 指定version不生效

在项目中依赖一个 spring-security 版本时, 发现未生效, 调用报错

由于项目是依赖了srpingBoot

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

只要加入spring-security的依赖, 哪怕指定了版本, 也会使用springBoot中的版本

找了半天, 发现把security的版本依赖放在maven的 dependencyManagement标签中即可

有关maven依赖中的version

构件依赖解析机制

1、首先判断依赖的范围是否为system,如果是system,直接从本地文件系统解析构件;

2、非system,需要根据依赖坐标计算仓库路径,然后先从本地仓库寻找构件,找到构件解析成功;

3、如果本地仓库找不到,再判断版本号是否为明确版本号,如果版本号明确,会从远程仓库下载相应版本的构件;

4、如果版本号不明确,如 RELEASE、LATEST 和 SNAPSHOT,Maven 就需要根据远程仓库更新策略来检查更新

  • 当RELEASE或者LATEST时,则会基于更新策略读取远程仓库的maven-metadata.xml,然后将其与本地仓库对应的元数据合并且计算出 RELEASE或LATEST的实际值,再根据这个真实的版本号值检查本地和远程仓库(步骤2、3)
  • 当为SNAPSHOT时,则会基于更新策略读取远程仓库的maven-metadata.xml,然后将其与本地仓库对应元数据合并且得到最新快照版本的值,再根据这个最新的快照版本号值检查本地和远程仓库(步骤2、3)

通过配置或命令行参数去设置远程仓库检查更新的策略

  • always
  • daily
  • interval
  • never

配置方式:

<repository> 
    <id>xxx-snapshots</id>  
    <url>https://xxx/repository/maven-xxx-snapshots/</url>  
    <releases> 
        <enabled>true</enabled>
    </releases>  
    <snapshots> 
        <enabled>true</enabled>  
        <updatePolicy>always</updatePolicy> 
    </snapshots> 
</repository> 
  • SNAPSHOT

最新快照版本:

即使本地仓库已缓存,仍然会根据更新策略去远程仓库检查构件是否更新,然后下载最新时间戳的构件。

当maven 检测到需要依赖一个Snashot版本时,就会尝试从所有的远程仓库下载对应的meta文件,并在与本地的meta文件进行merge,得到一个与{0.1.0-SNAPSHOT}并带有时间戳的最新的版本号{0.1.0-20210910.091638-3},然后再尝试下载该版本。

<dependency>
     <groupId>com.etoak</groupId>
     <artifactId>test</artifactId>
     <version>SNAPSHOT</version>
 </dependency>
  • RELEASE

最新发布版本:

如果本地仓库没有缓存,会去远程仓库获取;如果本地仓库已缓存,即使远程仓库同一版本号有更新,也不再去远程仓库获取。

<dependency>
     <groupId>com.etoak</groupId>
     <artifactId>test</artifactId>
     <version>RELEASE</version>
 </dependency>
  • LATEST

最新版本:

下载最新的SNAPSHOT或者最新的RELEASE,不推荐使用。

<dependency>
     <groupId>com.etoak</groupId>
     <artifactId>test</artifactId>
     <version>LATEST</version>
 </dependency>

指定依赖的版本范围:

<dependency>
     <groupId>com.etoak</groupId>
     <artifactId>test</artifactId>
     <version>[1.0.1,)</version>
 </dependency>

范围说明:

RangeMeaning
1.0x >= 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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring中单例和多例的深入理解

    Spring中单例和多例的深入理解

    这篇文章主要介绍了Spring中单例和多例的深入理解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Springboot 接口需要接收参数类型是数组问题

    Springboot 接口需要接收参数类型是数组问题

    这篇文章主要介绍了Springboot 接口需要接收参数类型是数组问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • SpringBoot多环境配置及配置文件分类实例详解

    SpringBoot多环境配置及配置文件分类实例详解

    这篇文章主要介绍了SpringBoot多环境配置及配置文件分类,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Java8实现Stream流的合并的方法展示

    Java8实现Stream流的合并的方法展示

    本文介绍了Java8中Stream流的合并方法,包括concat()、flatMap()和reduce()三种方法。其中,concat()方法可以将两个Stream流合并成一个,flatMap()方法可以将一个Stream流中的元素映射成多个Stream流并合并成一个,reduce()方法可以将Stream流中的元素逐个合并成一个结果
    2023-05-05
  • Spring中MVC模块代码详解

    Spring中MVC模块代码详解

    这篇文章主要介绍了Spring中MVC模块代码详解,涉及Controller的简单介绍,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • 基于application和bootstrap的加载顺序及区别说明

    基于application和bootstrap的加载顺序及区别说明

    这篇文章主要介绍了application和bootstrap的加载顺序及区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • spring cloud gateway集成hystrix实战篇

    spring cloud gateway集成hystrix实战篇

    这篇文章主要介绍了spring cloud gateway集成hystrix实战,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 深入解析java中的值传递和引用传递

    深入解析java中的值传递和引用传递

    这篇文章主要介绍了深入解析java中的值传递和引用传递,值传递是将变量的值复制给另一个变量,两个变量之间并没有直接关系,引用传递是将变量的引用(内存地址)传递给另一个变量,两个变量之间指向同一个内存地址,修改一个变量的值也会影响到另一个变量
    2023-07-07
  • 浅谈Java几种文件读取方式耗时

    浅谈Java几种文件读取方式耗时

    本文主要介绍了浅谈Java几种文件读取方式耗时,主要介绍了4种,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 一文学会Java运算符的使用

    一文学会Java运算符的使用

    计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量,本篇通过示例详细讲解了Java中不同运算符的使用,需要的朋友可以参考下
    2022-05-05

最新评论