`

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-overlay-实战笔记

    【标题】:“maven笔记:maven-overlay-实战笔记” 在 Maven 的世界里,"overlay" 是一个重要的概念,主要用于Web项目的构建和部署。Maven overlay 技术允许你将多个项目的输出“重叠”在一起,形成一个新的项目,...

    maven-聚合项目-springMVC

    **Maven**是Apache软件基金会开发的一款项目管理工具,它通过使用XML文件来管理和描述项目信息,包括项目的依赖关系、构建过程等。Maven的核心概念是项目对象模型(Project Object Model,POM),它是项目配置的中心...

    黑马maven笔记,第一天

    ### 黑马Maven笔记详解 #### Maven简介与特点 Maven是一款强大的项目管理和构建工具,作为Apache基金会下的一个开源项目,它完全采用Java语言编写,主要用于管理Java项目。Maven通过标准化项目构建过程和依赖管理...

    maven学习笔记1--myeclipse10中的配置

    Maven基于项目对象模型(Project Object Model, POM),通过POM文件来管理项目的构建过程和依赖关系。它使用了一种标准化的构建生命周期,包括清理、编译、测试、打包、验证、集成测试、部署等阶段。Maven通过中央...

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

    Maven是一个项目管理和综合工具,它通过一系列预定义的任务和明确的构建生命周期来管理项目的构建、报告和文档。Maven的核心特性之一是其生命周期(Lifecycle),它定义了一系列必须按顺序执行的构建阶段(Phase)。...

    maven聚合web工程--struts2+spring

    在描述中提到的"学习maven笔记"部分,我们可以理解这是一个关于Maven学习的过程记录,可能涵盖了Maven的基本概念、配置、生命周期以及如何使用它来构建和管理项目。"尚不能实现自动发布"暗示了作者可能还没有掌握...

    Maven入门实战笔记02-基础(2)

    Maven是一款强大的Java项目管理和集成工具,它帮助开发者统一构建过程,管理项目的依赖关系,并提供了编译、测试、打包、部署等一系列生命周期的管理功能。 【描述】虽然描述为空,但根据标题我们可以推断,这个...

    Maven笔记(2)-- 构建Java Project 及 Maven命令使用

    **Maven笔记(2)-- 构建Java Project 及 Maven命令使用** Maven是Apache组织开发的一个项目管理和综合工具,主要用于Java项目构建、依赖管理和项目信息管理。它通过一个统一的构建过程,使得项目的构建变得简单且...

    maven专题--笔记笔记(一)

    Apache Maven 是一个强大的项目管理工具,专为Java项目设计,但它同样可以应用于其他语言的项目。Maven的主要目的是简化软件的构建...通过理解Maven的工作原理和使用方式,开发者可以更高效地管理项目,提升开发效率。

    Maven 教程:基础篇-尚硅谷学习笔记 2022年

    Maven依赖于中央仓库和其他远程仓库来获取项目所需的依赖。中央仓库是Maven默认的依赖来源,存储了大量的开源项目JAR包。开发者也可以自定义私有仓库,以便于管理内部使用的组件。 ### 3. Maven生命周期 Maven的...

    Maven指南阅读笔记

    在阅读"Maven指南"的过程中,我们可以学习到几个关键知识点,包括:解决依赖冲突、排除不必要的传递性依赖、处理已提供构件以及利用`dependencyManagement`元素和`parent`元素的区别。 首先,当我们遇到`groupId`和...

    maven笔记t-JavaWeb

    4. **依赖管理**:Maven通过声明式地管理项目依赖,可以自动解决版本冲突,并且通过`dependencyManagement`标签可以统一管理项目中的依赖版本。 5. **生命周期与构建阶段**:Maven有三个基本生命周期,分别是`clean...

    Maven3实战笔记整合

    - **依赖管理**:自动下载和管理项目所需的外部依赖。 - **仓库**:存放依赖包的地方,分为本地仓库和远程仓库。 - **插件**:扩展Maven功能的工具,每个插件可以执行一个或多个任务。 #### Maven的基本使用 - **...

    Maven3实战笔记14Maven生成项目站点

    Maven 项目站点详解Maven 的项目站点功能是一个强大的文档生成工具,它可以帮助开发者生成项目相关的各种报告,包括但不限于项目信息、开发团队、源代码管理、持续集成、问题跟踪、许可证信息等。通过这些信息,...

    Maven3实战笔记(整合)

    3. **依赖管理**:Maven强大的依赖管理功能可以自动下载和解决项目依赖,但也会带来版本冲突等问题。掌握如何在POM中声明依赖、使用排除规则、配置依赖范围等,对于构建健康的项目至关重要。 4. **多模块项目**:...

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

    Maven依赖管理的关键在于它的中央仓库,存储了大量的开源库,开发者无需手动下载即可直接引用。此外,还可以设置本地仓库和私有远程仓库,以满足特定项目的需求。Maven通过解析POM文件中的依赖声明,自动从仓库中...

    Maven 2 学习笔记.txt

    Maven是一种流行的自动化构建工具,主要用于Java项目的构建、依赖管理和项目信息管理。以下将围绕标题、描述以及部分内容中提及的关键知识点进行详细阐述。 ### Maven 2 学习笔记 #### 一、Maven 项目的基本结构及...

    maven项目学习笔记记录

    Maven是由Apache软件基金会开发的一个项目管理工具,它通过一个统一的构建过程,简化了Java项目的构建、依赖管理和文档生成。Maven使用了一个基于XML的项目对象模型(Project Object Model,POM),来描述项目信息...

    Maven学习笔记.zip

    2. **依赖管理**:Maven通过POM中的`&lt;dependencies&gt;`标签管理项目所需的所有外部库。只需在POM中声明依赖,Maven就会自动下载并管理这些依赖及其版本。 3. **坐标**:每个Maven项目都有唯一的标识,由groupId、...

Global site tag (gtag.js) - Google Analytics