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,表示每天检查一次。
- 浏览: 151151 次
文章分类
- 全部博客 (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 296Lambda表达式学习总结 lambda其实是对应各种已 ... -
Git详解之二 Git基础
2016-04-20 15:00 586Git 基础 读完本章你就能上手使用 Git 了。本章将介 ... -
JAX-RS服务端接收中文乱码
2015-12-23 10:52 1052还记得在学servlet的时候,处理中文乱码时:如果是GET ... -
mongodb like查询
2015-12-17 10:07 545假如需要查找的字符串为s,则可以用db.tables.fin ... -
redis命令整理
2015-12-16 13:54 5361.批量清除缓存 redis-cli KEYS &q ... -
Linux下安装Nginx详细图解教程
2015-12-15 11:14 576什么是Nginx? Nginx (" ... -
JAX-RS 2.0 REST客户端编程实例
2015-12-14 22:46 1057导读 JAX-RS 2.0 又称 JSR 339 不仅定义 ... -
Java高效读取大文件
2015-12-12 23:35 4731、概述 本教程将演示如何用Java高效地读取大文件。 ... -
dubbo常见问题--使用多个进程启动服务,端口冲突怎么办?
2015-11-24 15:08 4202使用多个进程启动服务,端口冲突怎么办? 注:此为Sprin ... -
Maven 打包时把依赖打包到指定目录方法
2015-11-04 22:13 4872最近系统上线频繁,每次系统上线,当用maven打成war的时候 ... -
maven: 打包可运行的jar包(java application)及依赖项处理
2015-11-04 22:05 1786IDE环境中,可以直接用exec-maven-plugin插 ... -
tomcat下catalina.out日志文件分割
2015-10-28 20:25 596tomcat默认使用java.util.logging记录日 ... -
Java并发编程:阻塞队列
2015-10-28 13:57 509在前面几篇文章中,我们讨论了同步容器(Hashtable、V ... -
java处理图片--图片的缩放,旋转和马赛克化
2015-09-22 22:23 826这是我自己结合网上的一些资料封装的java图片处理类,支持图 ... -
在应用层通过spring特性解决数据库读写分离
2015-09-06 19:57 452如何配置mysql数据库的主从? 单机配置mysql主从: ... -
使用spring aop实现业务层mysql 读写分离
2015-09-06 19:43 437spring aop , mysql 主从配置 实现读写分离 ... -
Java栈与堆 String 详解
2015-09-01 20:10 366Java栈与堆 1. 栈(stack) ... -
java操作mongo的一点记录
2015-08-14 10:35 484一、驱动 mongo对应的java驱动的下载地址 htt ... -
java Future 接口介绍
2015-08-12 09:33 444在Java中,如果需要设定代码执行的最长时间,即超时,可以用 ... -
浅谈Future
2015-08-12 09:32 424Future到底是什么东西?很多人都对这个东西感到特别奇怪( ...
相关推荐
在IT行业中,Maven是一个非常重要的工具,它用于管理和构建Java项目。本篇文章将详细讲解在配置Maven时需要注意的一些关键点,确保你的开发环境能够顺利运行。 首先,要安装Maven。通常,你需要从Apache官方网站...
《Maven使用方法及注意事项详解》 Maven是一款强大的项目管理工具,主要用于Java项目的构建、管理和依赖管理。它遵循约定优于配置的原则,大大简化了项目的构建流程。本文将详细介绍Maven的使用方法以及一些关键...
该项目为基于Jenkins平台的Maven SNAPSHOT版本检查插件设计源码,包含27个文件,包括4个YAML配置文件、4个Java源代码...该插件旨在检查pom.xml文件中是否包含SNAPSHOT版本标识,适用于自动化构建和版本控制流程管理。
本文将深入探讨"Maven中主要jar包集合"这一主题,旨在帮助初学者理解Maven的工作原理以及如何利用它来高效地管理jar包。 首先,我们要明白什么是Maven。Maven是Apache软件基金会开发的一个项目管理和综合工具,主要...
在Maven仓库中,通常会按照这样的命名规则来组织SNAPSHOT版本,以便跟踪和更新开发中的库。 总的来说,"netcdfAll-5.5.4-SNAPSHOT.jar"是一个包含NetCDF Java库所有组件的JAR文件,适用于Java项目,特别是那些使用...
在Java开发中,Maven是一个强大的项目管理工具,它帮助开发者构建、管理和部署软件。Maven通过使用一种标准的项目对象模型(Project Object Model,POM)来描述项目,并利用插件来执行构建任务。本示例将深入探讨...
**注意事项:** - 如果检测步骤失败,可以尝试重启计算机或直接将Maven的绝对路径添加到`PATH`环境变量中。 #### 三、Eclipse中配置Maven **1. 安装Maven插件** - 打开Eclipse,选择`Help` -> `Install New ...
通常,这种文件会提供额外的提示或注意事项,确保安装和配置的正确性。 总结一下,Eclipse中的Maven插件让开发者能够方便地在IDE内管理Maven项目,而不用离开Eclipse去执行命令行操作。通过正确安装和配置插件,...
maven中setting阿里云的详细镜像配置,setting的配置细节 maven中setting阿里云的详细镜像配置,setting的配置细节
6. **支持更多元化格式的POM**:Maven 3.0 支持XML、JSON等多种格式的POM文件,使得与其他工具的集成更加便捷。 7. **性能提升**:Maven 3.0 在内存使用和启动速度上都有所优化,提升了整体的用户体验。 ### Maven...
Maven 3.5.2作为一个成熟的项目管理工具,极大地简化了Java开发中的构建和依赖管理。通过理解并熟练使用Maven,开发者可以更专注于编写代码,而无需关心构建过程的复杂性。在实际工作中,正确配置和利用Maven可以...
内容概要:Maven 安装与配置(Windows) Maven 概述: Maven 是一个流行的项目管理和构建工具,主要用于 Java 项目。它通过一个项目对象模型 (POM) 文件来管理项目的构建、依赖和文档。 适合人群: Java 开发人员 ...
**六、注意事项** - 要确保你的Maven本地仓库已经包含了所有Android库的依赖,否则Maven可能无法正确地下载和构建项目。 - 对于Android的特殊资源,如布局、图片等,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安装maven安装maven安装maven安装...
Maven 3.0.4 是 Apache Maven 的一个旧版本,但即便如此,它依然在许多项目中被广泛使用,因其稳定性与强大的功能而备受赞誉。Maven 是一个Java项目管理工具,它简化了构建、依赖管理和项目文档的生成过程。以下将...
Maven 3.3.9的安装与配置是Java开发者日常工作中不可或缺的一部分。理解并熟练掌握Maven的使用,将极大地提高开发效率,简化项目管理,同时确保团队协作的顺畅。通过以上步骤和概念,你应该对Maven有了全面的认识,...
【maven】说明:Gradle maven工件发布与maven、maven发布、android maven Gradle插件的演练。该项目包含..., (Gradle maven artifacts publishing walkaround with maven , maven-publish , android-maven gradle ...