​​​​​​​

构件依赖解析机制:

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>

范围说明:

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

有关Maven依赖中的version相关推荐

  1. Maven 依赖中 scope 详解

    前言 Maven 的哲学思想是,约定优于配置(Convention Over Configuration),Maven 依赖中 scope 的默认值是compile Scope 指定了依赖(第三方ja ...

  2. Maven依赖中groupId和artifactId的区别

    这两个是坐标 为了保证项目的唯一性.想要在一个大项目中找到一个小项目 就必须要根据这两个坐标进行查找. groupId一般是 domain+compnay_name: org.Apache artif ...

  3. 关于maven依赖中的scope的作用和用法

    举例如下: <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies - ...

  4. 关于maven依赖中的scopeprovided/scope使用

    今天开发web的时候,需要用到servlet-api,于是在pom.xml中添加依赖 <dependency><groupId>javax.servlet</groupI ...

  5. Maven依赖中的scope详解

    Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中,scope的默认值是compile,项目中经常傻傻的分不清,直接默认了 ...

  6. lt;scopegt;providedlt;/scopegt; 关于maven依赖中的scope的作用和用法

    举例如下: <dependency>             <groupId>org.springframework.boot</groupId>        ...

  7. maven依赖中部分依赖出现深灰色可能的解决方案

    问题如图: 1.按照网上不少同志建议的:直接右键项目,强制更新maven,即Update project: 2.也是我遇到的问题,发现该依赖包已经下载,但是由于 Index downloads are ...

  8. Maven依赖中scope的runtime和provied的区别

    <scope>runtime</scope> runtime 用在 Class.forName("com.mysql.jdbc.Driver") 时,com ...

  9. maven依赖本地非repository中的jar包-依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理...

    2019独角兽企业重金招聘Python工程师标准>>> maven依赖本地非repository中的jar包 http://www.cnblogs.com/piaolingxue/a ...

最新文章

  1. 【自然语言处理】N-最短路径法进行中文分词
  2. ISP_MPLS *** 理论笔记
  3. Python基本数据类型之整型
  4. android ------- 开发者的 RxJava 详解
  5. 软件构造学习笔记-第四周
  6. linux awk 常见字符串处理
  7. 前端VUE工程不占用80端口,浏览器不带端口访问VUE项目的实现
  8. uban系统如何安装java_Ubuntu系统下安装Java并配置环境
  9. php中创建函数的正确方法,如何在PHP中创建一个函数
  10. python模拟浏览器代码_python 模拟浏览器
  11. opengl入门6。1
  12. 使用npm uninstall卸载express无效
  13. 31. Element previousSibling 属性
  14. ORACLE设置自动递增的方法
  15. php libiconv close_PHP 5.2.17 编译安装时出现 undefined reference to `libiconv_open’ 错误的解决方法...
  16. linux虚拟机a problem has occurred and the system can‘t recover解决方案
  17. 易优cms地图文件sitemap生成
  18. C语言,指针变量的*p,p以及p的区别
  19. 左室短轴切面_一文读懂心脏超声基本切面
  20. 4.微信登入小程序与后端实现

热门文章

  1. 计算机管理 硬盘 设置脱机,win10系统提示磁盘处于脱机状态的设置教程
  2. Mac上制作Ubuntu USB启动盘
  3. android listview 左右滑动,Android ListView 左右滑动显示删除
  4. 1214: 盐水的故事 python
  5. 堕落之后重新开始学习
  6. 信息学奥赛一本通【1168】题解
  7. 关于Recycle.exe病毒
  8. 离线地图模式下实现路径规划
  9. SkeyeVSS以智能手段助力乘梯消防安全电梯AI智能监控解决方案
  10. 网关——Kong学习