`

maven2读书笔记-maven项目依赖管理

阅读更多

    maven2使用项目继承、dependencyManagement、dependecies以及multi-module来管理依赖(具体参见xsd)。


需要注意的地方有:

  1. 包含multi module的顶层pom必须在pom描述中定义packaging为pom,每项module则为其子文件夹的名称,maven2使用multi module信息来搜索子目录
  2. dependencyManagement定义的每项dependency中的版本号不影响maven2对项目构建的dependency graph,只有在child project未定义dependency版本时才有用。好处在更好地统一所有项目中用到的dependency的依赖版本,所有child project均不需要显式地定义dependecny版本。
  3. SNAPSHOT机制:SNAPSHOT机制是当你构建的dependency为每天都需从最新源代码构建时使用的。当定义dependency版本号为decimal-alike-SNAPSHOT时,maven2会自动查找最新版本的dependency。查找remote repository基于日期,若local repository中已有本日日期标志的版本号dependency,则不再查找下载,若需要强制再去下载本日最新SNAPSHOT,使用maven -U 选项。
  4. dependency传递性时遇到版本冲突的解决办法

 
遇到多个不一致的版本号时候处理方法:

 

     dependency显然是有传递性的。  一个project中直接声明的dependency可能有其间接的dependency,而多个直接声明的dependency若间接引用了同样名字的dependency但其版本号不相同时,则遇到了dependency版本冲突问题。
  A maven2的默认解决方法:maven2构建的dependency graph中,默认采用离根节点最近的节点声明的dependency 版本号来确认版本冲突时的选择问题
  B 上述方法不能解决同样深度的节点可能不唯一的问题,此时可能遇到两个不同版本,如何选择?而且即使只有一个最浅深度的节点,此时选择的dependency未必满足需要。


手动方法:
     1 删除不正确的版本号 使用mvn -X 来获取不正确的dependency版本号是由哪个地方定义的。删除它。
  具体方法:找到此来源dependency时,在其内部包含如下xml Document Fragment:  

<exclusions>
<exclusion>
<groupId>因为此dependency include进来时候导致冲突的dependency的 groupId</groupId>
<artifactId>因为此dependency include进来时候导致冲突的dependency的artifactId</artifactId>
</exclusion>
</exclusions>

 
     2 使用正确的版本号来使两个(多个)不同版本号协调:通过在两个(多个)地方重载此dependency的版本号。
     具体方法:直接在本project的pom中定义: 

<dependency>
<groupId>冲突的dependency的groupId</groupId>
<artifactId>冲突的dependency的</artifactId>
<version>正确版本号</version>
<scope>runtime</scope>
</dependency>

 

  

自动方法:
   使用版本范围:
   具体使用:在pom中直接定义:

<dependency>
<groupId>冲突的dependency的groupId</groupId>
<artifactId>冲突的dependency的</artifactId>
<version>[1.1,)</version>
</dependency>

 
   这里使用了版本范围的表示法。这里表示maven2会按照前面所说的自动查找最浅深度节点声明,如果其版本号是此版本范围内,则返回,若不,则继续查找,直到找到或者找完但没有找到。
各种范围表示法如下所示:

(,1.0] 表示<= 1.0
[1.2,1.3] 表示 1.2 - 1.3 (闭区间)
[1.0,2.0) 表示 1.0闭-2.0开
[1.5,) 表示>=1.5
(,1.1),(1.1,) 表示除了1.1版本外的任何版本均可
而版本号的解释如下:
1.0.1-(200060615.203040)-(1)
| | |        |         |
大小bug fix 标记符    构建号

其中最后两个打括号的部分只能二选一,因为标记符一般指release前的标记符,例如alpha-1,beta2,rc1,而构建号则指release版后补丁的自增号。但是SNAPSHOT是上述版本号命名的特例:可以使用上述所有格式。 

分享到:
评论

相关推荐

    maven项目搭建笔记

    maven项目搭建 依赖、继承、聚合关系

    Maven指南阅读笔记

    依赖不同名称的版本——结果是classpath中出现了同样项目的两份内容。 一般来说Maven会捕捉到这种冲突并且使用该项目的一个单独的版本,但是 当artifactId和artifactId不一样的时候,Maven就会认为它们是两种不同的...

    Maven3实战笔记05仓库依赖解析与插件解析

    Maven3实战笔记05——仓库依赖解析与插件解析。

    Maven 2 学习笔记.txt

    这个文件描述了这个项目,配置了插件,声明了依赖。 /src/ /src/main/ 我们项目的源码了资源文件被放在了src/main目录下面。在我们简单Java项目这 样的情况下,这个目录包含了一下java类和一些配置文件。...

    chm版本Maven教程

    Maven依赖管理 Maven自动化部署 Maven Web应用 Eclispe IDE集成Maven NetBeans IDE集成Maven Eclipse构建Maven项目 转换基于Maven的Java项目支持Eclipse IDE 转换基于Maven的Web应用程序支持Eclipse IDE 使用Maven...

    最新Java全栈工程师企业级开发视频教程(17G)

    第02章-使用Maven构建应用-Maven依赖机制.mp4---012.第02章-使用Maven构建应用-MavenPOM.mp4---013.第02章-使用Maven构建应用-Maven快照.mp4---014.第02章-使用Maven构建应用-第一个Maven应用程序.mp4第02天(5集)-...

    Maven学习精华教程-电子书

    此文件为exe格式电子书,无需安装任何阅读软件就可以打开,由mybase笔记软件生成。 此电子书详细介绍了项目自动化构建工具Maven的使用,内容清晰简洁明了,易于阅读、理解! 目录: Maven概念 Maven安装 Maven...

    Maven3实战笔记(全)

    Maven3实战笔记(全) 从安装配置,到仓库依赖,到集成测试,到插件管理,到构建web 作者风趣幽默的介绍了maven3的使用 强烈推荐

    maven的优缺点 项目

    2.[今日包含笔记] maven介绍: Eclise: 缺点: Jar包: 版本管理,解决jar包冲突:删除老的jar包,保留新的jar包 不同的项目,jar包要复制一份;Users Library 羡慕yum的好处,安装软件,自动下载,自动验证,自动安装,...

    黑马maven笔记第二天

    Maven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建:tomcat:run可以脱离开发工具 可跨平台 应用在大型项目可提高开发效率(模块开发)

    尚硅谷Maven课程笔记代码资源

    尚硅谷Maven视频课程里的记录,包括课件、代码、笔记、以及关于Maven的依赖资源

    maven笔记.docx

    依赖管理: Maven的依赖管理功能能够自动下载、安装和管理项目所需的依赖库。通过在POM中指定依赖项的坐标,Maven可以自动解析依赖关系,并从中央仓库或自定义仓库中下载所需的JAR包。 约定优于配置: Maven遵循...

    Maven3实战视频教程(14集)

    Maven3_04_maven的依赖特性 Maven3_05_maven的聚合和继承 Maven3_06_复习maven的基本内容 Maven3_07_nexus的介绍和安装 Maven3_08_nexus的配置 Maven3_09_发布项目到nexus中 Maven3_10_生命周期和插件简介 Maven3_11...

    Maven3实战笔记04Maven的生命周期和插件

    clean主要是清理项目、default是Maven最核心的的构建项目、site是生成项目站点。每一个大的生命周期又分为很多个阶段。后面的阶段依赖于前面的阶段,这点有点像Ant的构建依赖。生命周期本身相互独立,用户可以仅仅...

    Java,Maven基础学习笔记

    Maven简介,常见概念,安装及配置,Maven常用命令,生命周期说明,在idea中如何创建Maven工程,配置Maven环境以及依赖管理和依赖范围的说明。

    maven window下安装包

    第11章:用Maven管理项目版本/11.4 版本管理举例/11.4.1 插件:maven-release-plugin 第11章:用Maven管理项目版本/11.4 版本管理举例/11.4.2 新建maven项目 第11章:用Maven管理项目版本/11.4 版本管理举例/11.4.3 ...

    Maven 构建SpringMVC项目学习笔记

    Maven 构建SpringMVC项目学习笔记 一、背景介绍 二、构建工程 2.1、用maven插件构建项目框架 2.2、完善项目 2.3、将工程变成web工程 三、工程SpringMVC配置 ...3.2、添加Maven依赖 四、测试实例

    Maven学习笔记

    讲述Maven使用之旅,Maven依赖,仓库,发布等技术,需要资源的小伙伴请下载吧

    maven学习笔记,快速入门maven

    内容概要:maven学习笔记,适合刚接触maven的人能让你快速入门。 适用人群:大学生或者初基础maven的人 使用场景及目标:idea集成maven,用来下载依赖包

Global site tag (gtag.js) - Google Analytics