以下引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_snapshots.html:

一、场景

一个大型的软件应用通常包含多个模块,并且通常的场景是多个团队开发同一应用的不同模块。举个例子,设想一个团队开发应用的前端,项目为app-ui(app-ui.jar:1.0),而另一个团队开发应用的后台,使用的项目是data-service(data-service.jar:1.0)

现在可能出现的情况是开发data-service的团队正在进行快节奏的bug修复或者项目改进,并且他们几乎每隔一天就要发布库到远程仓库。

现在如果data-service团队每隔一天上传一个新版本,那么将会出现下面的问题:

  • data-service团队每次发布更新的代码时都要告知app-ui团队。
  • app-ui团队需要经常地更新他们pom.xml文件到最新版本。

为了解决这种情况, 快照(SNAPSHOT)的概念派上了用场。

二、什么是快照(SNAPSHOT)?

快照(SNAPSHOT)是一种特殊的版本,指定了某个当前的开发进度的副本。不同于常规的版本,Maven每次构建都会在远程仓库中检查新的快照

现在data-service团队会每次发布更新代码的快照到仓库中,比如说data-service:1.0-SNAPSHOT来替代旧的快照jar包。

注意:每次更新jar包时,版本好不变,且后缀必须带上-SNAPSHOT。

三、项目快照(Snapshot) VS 版本(Version)

版本(Version)的情况下,如果Maven以前下载过指定的版本文件,比如说data-service:1.0Maven将不会再从仓库下载新的可用的1.0文件。若要下载更新的代码,data-service的版本需要升到1.1

快照(Snapshot)的情况下,每次app-ui团队构建他们的项目时,Maven将自动获取最新的快照(data-service:1.0-SNAPSHOT)。

备注:版本(Version)存放在Release发布仓库。快照(Snapshot)存放在Snapshot快照仓库。

注意:版本(Version)的概念,只要不带有-SNAPSHOT的关键字时,都会认为这是一个在Release发布仓库的jar包。其中在Release发布仓库的jar包命名除了具体的版本号之后还可以带上比如:1.0-Release、1.0-rc1等等的字样。

四、原理详解

Maven中的仓库分为两种,Snapshot快照仓库Release发布仓库Snapshot快照仓库用于保存开发过程中的不稳定版本,Release正式仓库则是用来保存稳定的发行版本。定义一个组件/模块为快照版本,只需要在pom.xml文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写),如下所示:

<groupId>com.jsoft.test</groupId>
<artifactId>testcommon</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>

Maven会根据模块的版本号(pom.xml文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,Maven自动从镜像服务器上下载最新的快照版本。如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载

所以,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom.xml文件提示版本号来下载新的版本,直接Maven执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。

虽然,快照的情况下,Maven在日常工作中会自动获取最新的快照,你也可以在任何Maven命令中使用-U参数强制Maven下载最新的快照构建。命令如下:

mvn clean package -U

参考文章:

http://www.mzone.cc/article/277.html

https://maven.apache.org/settings.html#Repositories

转载于:https://www.cnblogs.com/EasonJim/p/6852840.html

Maven快照机制(SNAPSHOT)相关推荐

  1. 什么是Maven快照(SNAPSHOT)

    本文来说下Maven的SNAPSHOT版本有什么作用 文章目录 问题 解决 正式版本"abc-1.0" 快照版本"abc-1.0-SNAPSHOT" 本文小结 ...

  2. [zz]kvm环境快照(snapshot)的使用方法

    实例一  使用qemu-img命令使用快照 kvm环境下qcow2的镜像支持快照 1 确认镜像的格式   [root@nc1 boss]# qemu-img info test.qcow2    im ...

  3. 初探maven插件机制

    初探maven插件机制 第一部分 Plexus 本质上说,Maven是一个plugin的框架,所以需要有一个管理者来管理这些plugin.Maven选择了Plexus作为plugin的管理者.作为初探 ...

  4. maven仲裁机制_maven仲裁机制

    maven仲裁机制 玩过springboot的人都知道  springboot项目中你一般看不到大段的spring相关包 而是像 spring-boot-start一个jar包就包含spring相关的 ...

  5. Maven学习(八)-----Maven依赖机制

    Maven依赖机制 在 Maven 依赖机制的帮助下自动下载所有必需的依赖库,并保持版本升级. 案例分析 让我们看一个案例研究,以了解它是如何工作的.假设你想使用 Log4j 作为项目的日志.这里你要 ...

  6. 快照隔离(Snapshot Isolation)简单介绍和例子

    快照隔离(Snapshot Isolation)特性 1.写入程序不会阻碍读取程序 2.Snapshot isolation must be enabled for DB ALTER DATABASE ...

  7. 快照(Snapshot)

    一.定义: SNIA(存储网络行业协会)对快照(Snapshot)的定义是:关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像.快照可以是其所表示的数据的一个 ...

  8. 运行java maven项目提醒 -SNAPSHOT.jar中没有主清单属性(maven项目指定主类)

    运行java maven项目提醒 -SNAPSHOT.jar中没有主清单属性 问题描述 在运行使用maven打包的项目之后,运行项目发现主类没有找到.提示XXX–1.0-SNAPSHOT.jar中没有 ...

  9. maven快照版本机制详解

最新文章

  1. 基于RESTful API 怎么设计用户权限控制?
  2. OpenGL Shadow Mapping阴影贴图的实例
  3. maven+jetty项目在tomcat部署
  4. 云计算-从基础到应用架构系列-云计算的演进
  5. leetcode —— 面试题67. 把字符串转换成整数
  6. vmware view由哪些组件组成?
  7. CA与数字证书的自结
  8. PhpMyAdmin 配置文件现在需要一个短语密码的解决方法
  9. “ Value of nested property ‘teacher‘ is null”内部嵌套对象为空的问题
  10. python学习交流 - 匿名函数
  11. ssh - 安全外壳协议的详解,为什么使用它
  12. oracle 基本语法,正则表达式应用
  13. Mish:一个新的state of the art的激活函数,ReLU的继任者
  14. EDA课程设计,可编程逻辑设计课程设计
  15. 浙江省高校教师职称计算机考试成绩查询系统,浙江省高校招生考试信息管理系统...
  16. python 实现多线程下载m3u8格式视频,使用FFmpeg合并(升级修订自s_kangkang_A)
  17. 与i7性能相当的服务器cpu,i7 8550 U相当于七代什么水平?i7 8550 U性能评测分析
  18. Android原生webView概述
  19. 德国的共享杯,共享碗--还有什么不能共享?
  20. [转]数学建模竞赛常用软件培训2

热门文章

  1. java 获取内存使用情况_Java内存使用情况查看工具
  2. 【深度学习】如何从结构出发更好的改进一个神经网络
  3. python【数据结构与算法】选数问题(指定值求和——递归)
  4. python【蓝桥杯vip练习题库】ALGO-202二进制数数
  5. python极简主义_XData: 为 Python 之禅写的极简主义数据验证工具
  6. python爬虫音乐数据加入mysql_Python爬虫数据并存入MySQL数据库,实现可视化。
  7. c++ thread 内存泄漏_深入剖析ThreadLocal原理、内存泄漏及应用场景
  8. msfvenom java_Msfvenom命令总结大全
  9. 中山网络推广浅析网站优化在选择关键词时需要掌握的关键性原则是什么?
  10. 网络营销外包中那些超有效的网络营销方法有进一步了解过吗?