maven中的snapshot来源与注意事项
快照版本,很多人不是特别理解为什么要有这个事物的出现,它的出现对于编程有什么帮助吗?没有snapshot出现之前,我们开发过程依赖别人开发某个包,通常maven会集中管理这些依赖包,它会要求别人打包成jar放到镜像服务器上,自己本地的pom.xml文件设置了依赖后,maven编译时,会自动从镜像服务器上下载依赖。但如果镜像服务器上有相同版本的依赖时,maven就不会下载,这是上段文字的白话版本,那么举个例子说明一下。
比如,你的工程要依赖的core版本是 1.0.0 版本,结果这个版本还正处于对方(叫小菜吧)的开发过程中,他利用maven命令mvn install打包成jar,并部署到服务器上,根据pom设定的版本,你顺利下载了依赖包。但小菜后续开发过程,发现了一个致命bug,那么他再操作一次,那么,即使服务器的更新是你需要的,你只能干着急,只能跟小菜吼一声,“你的版本,老子无法更新依赖包,再给我发一个新的版本上去。”小菜一听,好吧,那我把版本升到 1.0.1 版本,你通过update dependencies 下载了这个新版本的jar包。这样的情况,会循环地出现,那么你和小菜有点恼火了,maven就是老鼠钻到风箱里,两头受气,maven想能不能开发一个功能,使双方默认可以上传并打包下载到最新的开发版本,而不用修改版本号,否则开发完成之后,服务器上是一堆的release版本。有了这个思路,maven增加了划时代的功能,snapshot ,这样依赖版本为 1.0.0-SNAPSHOT (注意必须为全大写),当服务器上有更新时,会自动下载到本地,省去了不少、和小菜的沟通时间,也减小了不少由于版本问题带来的编译错误。
任何东西的使用,需要遵循其规则,snapshot虽然好用,如果使用不当,反而易造成困惑问题。首先,开发一个依赖jar包时,注意snapshot版本号的不同,需要一个统一的地方记录各自的版本,在开发周期很长的情况下,版本号release的顺序并非按版本号顺序发布,重要的是,大家的开发版本号不能重复。如果你也在开发这个core.jar,你依赖于本地,而服务器上别人有也相同版本号的core.jar定期放在服务器上,这样,本地的jar经常会被来自服务器版本覆盖而导致错误。
总结一下,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而保证了开发进度和质量。
1、mvn调试信息:
比如:mvn -X -e clean compile
-e:打印错误信息 。
-X:代表debug模式 。
2、如果在setting里用mirror的,直接报找不到对应的jar错误。
原来setting配置:
<mirrors>
<mirror>
<id>Nexus</id>
<url>http://192.168.4.11/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
这个是有问题的,可以用-X -e看到如下信息:
[DEBUG] Repositories (dependencies): [Nexus (http://192.168.4.11/content/groups/
public/, releases)]
[DEBUG] Repositories (plugins) : [Nexus (http://192.168.4.11/content/groups/
public/, releases)]
明显public只对release有效,对snapshot无效。解决办法只能需要定义mirrortype指定对snapshot有效。
更改为:
<mirrors>
<mirror>
<id>Nexus</id>
<url>http://192.168.4.11/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
<mirror>
<id>Nexus2</id>
<url>http://192.168.4.11/content/groups/public/</url>
<mirrorOf>public-snapshots</mirrorOf> // 对snapshots有效
</mirror>
</mirrors>
<profiles> //定义public-snapshots profile
<profile>
<id>public-snapshots</id>
<repositories>
<repository>
<id>public-snapshots</id>
<url>http://public-snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public-snapshots</id>
<url>http://public-snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>public-snapshots</activeProfile>
</activeProfiles> //使profile生效。
再看debug输出:
[DEBUG] Repositories (dependencies): [Nexus (http://192.168.4.11/content/groups/
public/, snapshots), central (http://repo1.maven.org/maven2, releases)]
[DEBUG] Repositories (plugins) : [Nexus (http://192.168.4.11/content/groups/
public/, snapshots), central (http://repo1.maven.org/maven2, releases)]
搞定!
总感觉上面的方法有点蹩脚!
sonatype的官方配置如下:
另外一种配置方法见:http://www.sonatype.com/books/nexus-book/reference/maven-sect-single-group.html
3、注意:maven会自动从仓库中检查模块A的快照版本的最新版本,当发现有更新时便进行下载。默认情况下,maven每天检查一次更新(由仓库配置的updatePolicy控制),用户也可以使用命令-U参数强制让maven检查更新,如maven clean install -U。
元素updatePlocy说明:用来配置maven从远程仓库检查更新的频率,默认的值为daily,表示每天检查一次。
maven中的snapshot来源与注意事项的更多相关文章
- Maven中的SnapShot版本和Release版本
# Maven中的SnapShot版本和Release版本 ## 区别 - SnapShot 快照版本- Release 发布版本 ## 重要区别 - 本地获取这些依赖的机制不同,如果是快照版本,Ma ...
- 理解Maven中的SNAPSHOT版本和正式版本
Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个 ...
- Maven中的SNAPSHOT版本和正式版本理解
Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个 ...
- maven中运行hibernate5的一些注意事项
问题1:Could not bind factory to JNDI hibernate.cfg.xml中<sessionFactory> 标签中的name="foo" ...
- maven 中snapshot版本和release版本的区别
maven中的仓库分为两种,snapshot快照仓库和release发布仓库.snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本.定义一个组件/模 ...
- maven中snapshot快照库和release发布库的区别和作用
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...
- 关于maven中的快照版本(snapshot)与正式版本(release)解析。
Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个 ...
- maven中snapshot快照库和release发布库的区别和作用 (转)
Maven介绍,包括作用.核心概念.用法.常用命令.扩展及配置 http://www.trinea.cn/android/maven/ 本文来源于铁木箱子的博客http://www.mzone.cc ...
- Maven不能下载SNAPSHOT包但是能下载RELEASE包的解决办法
在使用过程中,Maven默认配置是不能下载SNAPSHOT包的,这是基于一种代码稳定性进行考量得出的结论.引入SNAPSHOT包最大的问题就是,由于SNAPSHOT允许重复上传,所以引用一个这样的包开 ...
随机推荐
- jQuery 事件方法大全-超全的总结
jquery经常使用的事件: /* on off hover blur change click dblclick focus ...
- Snmp学习总结(二)——WinXP安装和配置SNMP
一.安装SNMP 今天讲解一下在XP下安装SNMP协议,安装步骤如下:
- 使用Axure RP原型设计实践02,自定义部件以及熟悉与部件相关面板
本篇体验在Axure中自定义部件,并熟悉Widget Interations and Notes面板,Widget Properties and Style面板,Widget Manager面板. 在 ...
- 在ASP.NET MVC中使用Knockout实践07,自定义验证信息的位置与内容
在前两篇中,体验了Knockout的基本验证和自定义验证.本篇自定义验证信息的显示位置与内容. 自定义验证信息的显示位置 通常,Knockout的验证信息紧跟在input后面,通过validation ...
- DirectX全屏游戏中弹出窗口(转)
一直有人问如何在DirectX全屏游戏中弹出窗口就象金山游侠一样.我答应过要给出原码,只是一直没有时间整理,不过现在总算是弄玩了.代码不长,大致作了些注释,但愿你能看懂:)按照我的说明一步步作应该就能 ...
- ASIHTTPRequestErrorDomain Code=5
ASIHttpRequest解析带空格的URL时 出错!!!(已解决) 用的是post请求 URL 地址是: http://111.234.51.56/login_member.pl?time=201 ...
- EBS已安装模块
/* Formatted on 2018/3/15 11:14:51 (QP5 v5.256.13226.35538) */ SELECT fa.application_short_name , fp ...
- 【gitlab】首次提交本次代码到gitlab上,报错:Updates were rejected because the remote contains work that you do
首次提交本次代码到gitlab上,报错:Updates were rejected because the remote contains work that you do 报错情况如下: 错误原因: ...
- 用代码获取APP启动页图片
用代码获取APP启动页图片 源码 - swift // // AppleSystemService.swift // Swift-Animations // // Created by YouXian ...
- Android之Activity与fragment完整生命周期图
转自:https://github.com/xxv/android-lifecycle
转载▼