maven中snapshot快照库和releasemaven 发布release库的区别和作用

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&maven中的snapshot发源与注意事项 - 研发管理当前位置:& &&&maven中的snapshot发源与注意事项maven中的snapshot发源与注意事项&&网友分享于:&&浏览:0次maven中的snapshot来源与注意事项
maven的依赖管理是基于版本管理的,在maven2之后,把版本管理细化snapshot 快照仓库和release发布仓库。release版本,对于发布状态的artifact(就是被依赖的jar包),如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,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&
&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&
&id&Nexus&/id&
&url&http://192.168.4.11/content/groups/public/&/url&
&mirrorOf&*&/mirrorOf&
&id&Nexus2&/id&
&url&http://192.168.4.11/content/groups/public/&/url&
&mirrorOf&public-snapshots&/mirrorOf& // 对snapshots有效
&/mirror&&/mirrors&&profiles& //定义public-snapshots 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的官方配置如下:另外一种配置方法见:/books/nexus-book/reference/maven-sect-single-group.html3、注意:maven会自动从仓库中检查模块A的快照版本的最新版本,当发现有更新时便进行下载。默认情况下,maven每天检查一次更新(由仓库配置的updatePolicy控制),用户也可以使用命令-U参数强制让maven检查更新,如maven clean install -U。元素updatePlocy说明:用来配置maven从远程仓库检查更新的频率,默认的值为daily,表示每天检查一次。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 maven如何发布release 的文章

 

随机推荐