参考链接:https://www.cnblogs.com/huang0925/p/5169624.html

理解Maven中的SNAPSHOT版本和正式版本

Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制。在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个属性构成的,分别是groupId、artifactId以及version。这三个属性可以唯一确定一个组件(Jar包或者War包)。

其实在Nexus仓库中,一个仓库一般分为public(Release)仓和SNAPSHOT仓,前者存放正式版本,后者存放快照版本。如果在项目配置文件中(无论是build.gradle还是pom.xml)指定的版本号带有’-SNAPSHOT’后缀,比如版本号为’Junit-4.10-SNAPSHOT’,那么打出的包就是一个快照版本。

快照版本和正式版本的主要区别在于,本地获取这些依赖的机制有所不同。假设你依赖一个库的正式版本,构建的时候构建工具会先在本次仓库中查找是否已经有了这个依赖库,如果没有的话才会去远程仓库中去拉取。所以假设你发布了Junit-4.10.jar到了远程仓库,有一个项目依赖了这个库,它第一次构建的时候会把该库从远程仓库中下载到本地仓库缓存,以后再次构建都不会去访问远程仓库了。所以如果你修改了代码,向远程仓库中发布了新的软件包,但仍然叫Junit-4.10.jar,那么依赖这个库的项目就无法得到最新更新。你只有在重新发布的时候升级版本,比如叫做Junit-4.11.jar,然后通知依赖该库的项目组也修改依赖版本为Junit-4.11,这样才能使用到你最新添加的功能。

这种方式在团队内部开发的时候会变的特别蛋痛。假设有两个小组负责维护两个组件,example-service和example-ui,其中example-ui项目依赖于example-service。而这两个项目每天都会构建多次,如果每次构建你都要升级example-service的版本,那么你会疯掉。这个时候SNAPSHOT版本就派上用场了。每天日常构建时你可以构建example-service的快照版本,比如example-service-1.0-SNAPSHOT.jar,而example-ui依赖该快照版本。每次example-ui构建时,会优先去远程仓库中查看是否有最新的example-service-1.0-SNAPSHOT.jar,如果有则下载下来使用。即使本地仓库中已经有了example-service-1.0-SNAPSHOT.jar,它也会尝试去远程仓库中查看同名的jar是否是最新的。有的人可能会问,这样不就不能充分利用本地仓库的缓存机制了吗?别着急,Maven比我们想象中的要聪明。在配置Maven的Repository的时候中有个配置项,可以配置对于SNAPSHOT版本向远程仓库中查找的频率。频率共有四种,分别是always、daily、interval、never。当本地仓库中存在需要的依赖项目时,always是每次都去远程仓库查看是否有更新,daily是只在第一次的时候查看是否有更新,当天的其它时候则不会查看;interval允许设置一个分钟为单位的间隔时间,在这个间隔时间内只会去远程仓库中查找一次,never是不会去远程仓库中查找(这种就和正式版本的行为一样了)。

Maven版本的配置方式为:

1
2
3
4
5
6 7 8 
<repository>
    <id>myRepository</id>  <url>...</url>  <snapshots>  <enabled>true</enabled>  <updatePolicy>XXX</updatePolicy>  </snapshots> </repository> 

其中updatePolicy就是那4种类型之一。如果配置间隔时间更新,可以写作interval:XX(XX是间隔分钟数)。daily配置是默认值。

而在Gradle,可以设置本地缓存的更新策略。

1
2
3
4
5
6 
configurations.all {

// check for updates every build
resolutionStrategy.cacheChangingModulesFor  0,'seconds'
 } 

当然也可以按照分钟或者小时来设置.

1
2
3
4
5
configurations.all {

resolutionStrategy.cacheChangingModulesFor  10, ‘minutes'

} 
1
2
3
4
5
configurations.all {

resolutionStrategy.cacheChangingModulesFor  4, ‘hours'

} 

所以一般在开发模式下,我们可以频繁的发布SNAPSHOT版本,以便让其它项目能实时的使用到最新的功能做联调;当版本趋于稳定时,再发布一个正式版本,供正式使用。当然在做正式发布时,也要确保当前项目的依赖项中不包含对任何SNAPSHOT版本的依赖,保证正式版本的稳定性。

转载于:https://www.cnblogs.com/txfsheng/p/9407226.html

maven中snapshot版本和正式版本的区别相关推荐

  1. 理解Maven中的SNAPSHOT版本和正式版本

    Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个 ...

  2. maven中snapshot快照库与maven-metadata.xml

    在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...

  3. 如何优雅的区分测试版本和正式版本的环境

    小明一个刚入行安卓的小萌新,刚刚在测试小姐姐那里交过学费(挨过骂)了解到软件开发过程中是需要区分正式.测试环境的.但是他稍加思考就能想到测试.正式环境的区别仅仅是host不一样而已,其他的比如接口名. ...

  4. maven快照版本和发布版本

    在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...

  5. maven2中snapshot快照库和release发布库的应用

     http://www.mzone.cc/article/279.html 转载声明] 转载时必须标注:本文来源于铁木箱子的博客http://www.mzone.cc [本文地址] 本文永久地址是 ...

  6. 什么是Maven快照(SNAPSHOT)

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

  7. 快照版本和发布版本区别

    在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...

  8. maven中DependencyManagement和Dependencies

    上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是<scope>provided</scope>的情况,比如如下: 双击代码全选 1 2 ...

  9. Maven的Snapshot版本与Release版本

    1. Snapshot版本代表不稳定.尚处于开发中的版本 2. Release版本则代表稳定的版本 3. 什么情况下该用SNAPSHOT?  协同开发时,如果A依赖构件B,由于B会更新,B应该使用SN ...

最新文章

  1. 【原创】gooogleman亲自参与设计的三星Cortex A8 S5pv210 之Sate210核心板硬件用户手册(作者:gooogleman)...
  2. 七牛云rs.php位置,七牛云存储PHP生成管理凭证以及查看文件(state)
  3. 分类模型的性能评价指标(Classification Model Performance Evaluation Metric)
  4. HDOJ1016 素数环(DFS)
  5. JAVA复习(二维数组——快排——迷宫)
  6. IBM研究院计画5年改变人类生活创新预测
  7. 05 使用VS程序调试的方法和技巧1214
  8. 微课--Python生成器函数定义与使用(19分钟)
  9. Git上传文件到GitHub失败问题解决
  10. jQuery.validate 中文API
  11. 怎么看mmdetection版本_如何评价商汤开源的 mm-detection 检测库?
  12. 为什么有int 和integer
  13. hihoCoder-1000-A+B
  14. 微信小程序点餐系统源码
  15. 一个博士生接受怎样的训练是完整、全面的科研训练?
  16. 大一计算机知识总结,大学计算机基础超详细知识点(高手总结)免费
  17. 英雄连2一直显示连接relic服务器,英雄连2 联机PleaseWait问题解决详细教程
  18. Chrome 页面呈现原理与性能优化(内附分享 ppt)
  19. 2021-10-11 全国大学生软件测试大赛赛前学习参考资料
  20. 猫哥教你写爬虫 044--模拟浏览器-作业

热门文章

  1. JAVA 的wait(), notify()与synchronized同步机制
  2. 苏宁V购 不为拯救 只求改变
  3. 解决sharepoint 2010浏览器在线浏览Word出错
  4. 存储时间:从Symmetrix V-Max看高端存储的未来
  5. 2019第十二届“认证杯”数学建模(第二阶段)
  6. conda 基本操作
  7. 4.1 配置Flask-WTF
  8. 把两个文件捆绑压缩成一个文件命令
  9. css使用1-搜狐浏览器和chrome浏览器不同点记录
  10. CSS中expression使用简介(转载)