>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring:Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 21098 个阅读者 刷新本主题
 * 贴子主题:  Maven 快照(SNAPSHOT) 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2019-08-17 16:12:01     消息  查看  搜索  好友  邮件  复制  引用

  

Maven 快照(SNAPSHOT)

     一个大型的软件应用通常包含多个模块,并且通常的场景是多个团队开发同一应用的不同模块。举个例子,设想一个团队开发应用的前端,项目为 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 文件到最新版本。
      为了解决这种情况, 快照的概念派上了用场。    

什么是快照?

     快照是一种特殊的版本,指定了某个当前的开发进度的副本。不同于常规的版本,Maven 每次构建都会在远程仓库中检查新的快照。
     现在 data-service 团队会每次发布更新代码的快照到仓库中,比如说 data-service:1.0-SNAPSHOT 来替代旧的快照 jar 包。    

项目快照 vs 版本

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

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

app-ui 项目的 pom.xml 文件

     app-ui 项目使用的是 data-service 项目的 1.0 快照。


< project   xmlns = " http://maven.apache.org/POM/4.0.0 "  
    xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance "
    xsi:schemaLocation = " http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd " >
    < modelVersion > 4.0.0 </ modelVersion >
    < groupId > app-ui </ groupId >
    < artifactId > app-ui </ artifactId >
    < version > 1.0 </ version >
    < packaging > jar </ packaging >
    < name > health </ name >
    < url > http://maven.apache.org </ url >
    < properties >
       < project . build . sourceEncoding > UTF-8 </ project . build . sourceEncoding >
    </ properties >
    < dependencies >
       < dependency >
       < groupId > data-service </ groupId >
          < artifactId > data-service </ artifactId >
          < version > 1.0-SNAPSHOT </ version >
          < scope > test </ scope >
       </ dependency >
    </ dependencies >
</ project >

data-service 项目的 pom.xml 文件

     data-service 项目为每次小的改动发布 1.0 快照。


< project   xmlns = " http://maven.apache.org/POM/4.0.0 "  
    xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance "
    xsi:schemaLocation = " http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd " >
    < modelVersion > 4.0.0 </ modelVersion >
    < groupId > data-service </ groupId >
    < artifactId > data-service </ artifactId >
    < version > 1.0-SNAPSHOT </ version >
    < packaging > jar </ packaging >
    < name > health </ name >
    < url > http://maven.apache.org </ url >
    < properties >
       < project . build . sourceEncoding > UTF-8 </ project . build . sourceEncoding >
    </ properties >
</ project >

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

       mvn clean package -U

      让我们打开命令控制台,去到 C:\ > MVN ] app-ui 目录,然后执行下面的 mvn 命令。

         C:\MVN\app-ui>mvn clean package -U

      Maven 将在下载 data-service 最新的快照之后,开始构建项目。

[INFO] Scanning for projects...

[INFO] -------------------------------------------------------------------

[INFO] Building consumerBanking

[INFO]    task-segment: [clean, package]

[INFO] -------------------------------------------------------------------

[INFO] Downloading data-service:1.0-SNAPSHOT

[INFO] 290K downloaded.

[INFO] [clean:clean {execution: default-clean}]

[INFO] Deleting directory C:\MVN\app-ui\target

[INFO] [resources:resources {execution: default-resources}]

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,

i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\main\resources

[INFO] [compiler:compile {execution: default-compile}]

[INFO] Compiling 1 source file to C:\MVN\app-ui\target\classes

[INFO] [resources:testResources {execution: default-testResources}]

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,

i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\test\

resources

[INFO] [compiler:testCompile {execution: default-testCompile}]

[INFO] Compiling 1 source file to C:\MVN\app-ui\target\test-classes

[INFO] [surefire:test {execution: default-test}]

[INFO] Surefire report directory: C:\MVN\app-ui\target\

surefire-reports

-------------------------------------------------------

T E S T S

-------------------------------------------------------

Running com.companyname.bank.AppTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec

        Results :

        Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

        [INFO] [jar:jar {execution: default-jar}]

[INFO] Building jar: C:\MVN\app-ui\target\

app-ui-1.0-SNAPSHOT.jar

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESSFUL

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 2 seconds

[INFO] Finished at: Tue Jul 10 16:52:18 IST 2012

[INFO] Final Memory: 16M/89M

[INFO] ------------------------------------------------------------------------






程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-02-15 10:23:13 重新编辑]
  Java面向对象编程-->异常处理
  JavaWeb开发-->访问数据库(Ⅰ)
  JSP与Hibernate开发-->通过JPA API检索数据
  Java网络编程-->用Swing组件展示HTML文档
  精通Spring-->Vue简介
  Vue3开发-->Vue组件开发高级技术
  RocketMQ 常用消息类型
  Spring 5 webflux响应式编程 - 但时间也偷换概念
  Spring 自动注入的三种方式:byName、byType、constructor
  Spring MVC和前后端分离的RESTFul框架
  Spring MVC国际化
  Spring MVC控制器类的方法的所支持的方法参数类型
  超详细使用Maven 搭建 Spring MVC 本地部署Tomcat 实现 Hell...
  深入Redis客户端(redis客户端属性、redis缓冲区、关闭redis客...
  SpringCloud Gateway-整体流程
  使用 Flask-RESTful 设计 RESTful API
  理解 RESTful 风格的 API
  RabbitMQ的用途、原理以及配置
  微服务中的Kafka与Micronaut
  利用Spring Boot如何开发REST服务详解
  Hibernate拦截器与监听器
  更多...
 IPIP: 已设置保密
楼主      
该用户目前不在线 nihaota 
  
威望: 0
级别: 新手上路
魅力: 1315
经验: 1315
现金: 2944
发文章数: 243
注册时间: 0001-01-01
 消息  查看  搜索  好友  邮件  复制  引用


讨债公司
发文章时间 2022-10-28 20:58:55
 IPIP: 已设置保密 1 楼     
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。