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>
<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,表示每天检查一次。
- 浏览: 146208 次
文章分类
- 全部博客 (151)
- Open Source (7)
- kafka (5)
- Web前端 (2)
- 管理工具 (9)
- linux (4)
- 监控系统 (7)
- 数据库 (8)
- Java (56)
- ibatis/mybatis (2)
- mongodb (29)
- hadoop (3)
- hibernate (1)
- spring (6)
- IOS (1)
- Python (1)
- Java Web (4)
- java 压缩 (1)
- redis (11)
- oracle (1)
- nginx (4)
- springbatch (2)
- zookeeper (2)
- 流量复制 (2)
- 技术杂谈 (1)
- HTML5 (1)
- git (1)
最新评论
发表评论
-
Lambda表达式学习总结
2018-02-28 10:48 253Lambda表达式学习总结 lambda其实是对应各种已 ... -
Git详解之二 Git基础
2016-04-20 15:00 539Git 基础 读完本章你就能上手使用 Git 了。本章将介 ... -
JAX-RS服务端接收中文乱码
2015-12-23 10:52 1010还记得在学servlet的时候,处理中文乱码时:如果是GET ... -
mongodb like查询
2015-12-17 10:07 507假如需要查找的字符串为s,则可以用db.tables.fin ... -
redis命令整理
2015-12-16 13:54 4941.批量清除缓存 redis-cli KEYS &q ... -
Linux下安装Nginx详细图解教程
2015-12-15 11:14 535什么是Nginx? Nginx (" ... -
JAX-RS 2.0 REST客户端编程实例
2015-12-14 22:46 1019导读 JAX-RS 2.0 又称 JSR 339 不仅定义 ... -
Java高效读取大文件
2015-12-12 23:35 4341、概述 本教程将演示如何用Java高效地读取大文件。 ... -
dubbo常见问题--使用多个进程启动服务,端口冲突怎么办?
2015-11-24 15:08 4146使用多个进程启动服务,端口冲突怎么办? 注:此为Sprin ... -
Maven 打包时把依赖打包到指定目录方法
2015-11-04 22:13 4836最近系统上线频繁,每次系统上线,当用maven打成war的时候 ... -
maven: 打包可运行的jar包(java application)及依赖项处理
2015-11-04 22:05 1753IDE环境中,可以直接用exec-maven-plugin插 ... -
tomcat下catalina.out日志文件分割
2015-10-28 20:25 564tomcat默认使用java.util.logging记录日 ... -
Java并发编程:阻塞队列
2015-10-28 13:57 462在前面几篇文章中,我们讨论了同步容器(Hashtable、V ... -
java处理图片--图片的缩放,旋转和马赛克化
2015-09-22 22:23 802这是我自己结合网上的一些资料封装的java图片处理类,支持图 ... -
在应用层通过spring特性解决数据库读写分离
2015-09-06 19:57 424如何配置mysql数据库的主从? 单机配置mysql主从: ... -
使用spring aop实现业务层mysql 读写分离
2015-09-06 19:43 404spring aop , mysql 主从配置 实现读写分离 ... -
Java栈与堆 String 详解
2015-09-01 20:10 339Java栈与堆 1. 栈(stack) ... -
java操作mongo的一点记录
2015-08-14 10:35 454一、驱动 mongo对应的java驱动的下载地址 htt ... -
java Future 接口介绍
2015-08-12 09:33 415在Java中,如果需要设定代码执行的最长时间,即超时,可以用 ... -
浅谈Future
2015-08-12 09:32 399Future到底是什么东西?很多人都对这个东西感到特别奇怪( ...
相关推荐
Maven 配置注意事项: 1.安装maven,在myeclipse中换为自己安装的maven 2.修改maven中conf/setting.xml的配置修改仓库位置、以及 配置server 如 <localRepository>D:\Program Files\apache-maven-3.3.3\repository ...
maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装...
Maven使用方法
maven中setting阿里云的详细镜像配置,setting的配置细节 maven中setting阿里云的详细镜像配置,setting的配置细节
maven 实用手册 中文 Maven权威指南中文版 Maven权威指南中文版
Maven 中文简介, 包含Maven 语法, 节点讲解, 使用方法.
解决 Maven 无法下载 fastdfs-client-java-1.29-SNAPSHOT 依赖,直接下载之后用maven命令存储到本地maven仓库即可。 maven命令 mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java ...
中文maven中文maven文档。很详细。大家看看
Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令
maven3.0maven3.0maven3.0maven3.0maven3.0maven3.0maven3.0maven3.0maven3.0maven3.0
maven的安装与配置; maven的安装与配置 ;maven的安装与配置
-D传入属性参数-P使用pom中指定的配置-e显示maven运行出错的信息-o离线执行命令,即不去远程仓库更新包-X显示maven允许的debug信息-U强制去远程参考更新snapshot包例如mvninstall-Dmaven.test.skip=true-Poracle其他...
Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven...
maven中jar包为下载完成last清理,更好的让maven管理jar包
maven 工具 maven 工具 maven 工具 maven 工具 maven 工具
maven中文学习,maven-definitive-guide_zh.pdf
Maven3_02_maven安装的注意事项 Maven3_03_在eclipse中建立简单的项目 Maven3_04_maven的依赖特性 Maven3_05_maven的聚合和继承 Maven3_06_复习maven的基本内容 Maven3_07_nexus的介绍和安装 Maven3_08_nexus的配置 ...
maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程
maven
Maven中scope详细说明 依赖范围控制哪些依赖在哪些classpath 中可用,哪些依赖包含在一个应用中。