`

maven传递依赖的版本确定规则

 
阅读更多

http://blog.csdn.net/bluishglc/article/details/6584678

 

maven传递依赖的版本确定规则,也就是对重复的间接依赖的包的选择规则:

  1. 在工程的依赖树上,深度越浅,越被优先选择。如本例中的spring-jms. 由于pom中直接声明了3.0.2版本的spring-jms,所以3.0.2版本的spring-jms在工程的依赖树上处在第一层,而activemq-optional所间接依赖的3.0.3版本的spring-jms则是处在工程依赖树的第二层,则maven会以深度浅者优先,所以最后解析的结果是选择了3.0.2版本的spring-jms。


  2. 若两个依赖包处于依赖树上的同一层,则谁在前,选择谁。如本例中的spring-core.一个是activemq-optional的间接依赖,一个是spring-context的间接依赖,两个依赖都是处在第二层上,但由于是activemq-optional声明在前,所以maven优先选择了activemq-optional所依赖的3.0.3的版本!

 

  3. 避免传递依赖引起版本问题的最佳实践。现在很多的开源框架和工具都开始分模块打包发布,比如spring,hibernate都是如此,而这些模块之间又有可能存在相关的依赖关系,为了避免出现版本不一致问题,比如上例中出现的spring-jms使用的是3.0.2,而spring-core却使用了3.0.3这种情况,需要我们对一个工程直接依赖的某一框架的多个模块都要做出声明,而不要依赖其内部的依赖关系来间接引入。总结起来就昌:一般来说,如果工程直接依赖到某一框架的多个模块,最好全部声明这些依赖。

 

分享到:
评论

相关推荐

    2024版Maven仓库清除工具

    这涉及到对Maven的依赖管理机制的理解,包括依赖范围(compile、runtime、test等)和传递性依赖。 3. **安全清除**:在确认无误后,工具将安全地删除这些未使用的依赖,释放磁盘空间。这个过程会避免误删重要的系统...

    在Maven项目中,如何使用自己的jar包.zip

    在Maven项目中,使用自己的jar包是一个常见的需求,特别是在开发过程中...在团队开发中,尽量避免过多使用`system`作用域的依赖,因为它们不被Maven的依赖管理和传递性依赖规则所覆盖,可能导致其他开发者遇到问题。

    maven学习笔记

    - **依赖调解**:当多个依赖项之间存在版本冲突时,Maven 会根据依赖调解规则确定最终使用的版本。在 Maven 2.0 中,依赖调解的规则较为复杂,需要仔细理解以避免版本冲突问题。 通过以上的介绍,我们不仅了解了 ...

    Maven实战最清楚版

    - **7.8.3 解析插件版本**:Maven如何确定使用哪个版本的插件。 - **7.8.4 解析插件前缀**:Maven如何解析插件前缀。 - **7.9 小结**:总结Maven生命周期和插件的相关知识点。 #### 8. 聚合与继承 - **8.1 ...

    MAVEN基础篇-资料整理

    坐标用于唯一确定一个依赖项,从而避免重复引入相同依赖的不同版本导致的问题。 ##### 2.5 依赖 Dependency Maven 通过依赖管理机制来处理项目间的依赖关系。每个依赖项都需要指定其坐标信息。Maven 自动解析依赖...

    自定义ant task 验证POM文件版本依赖

    使用Java的`java.util.Comparator`接口或Apache Commons Lang的`VersionComparator`类,比较不同POM文件中的依赖版本,以确定它们是否符合预设的规则。 4. **报告结果**: 如果发现版本不匹配,Task应当输出警告...

    rabbitMQ Maven实例

    在Java开发中,Maven是常用的构建工具,可以帮助我们管理项目的依赖关系。在这个“rabbitMQ Maven实例”中,我们将深入探讨如何使用Maven集成RabbitMQ到Java应用中。 首先,我们需要在`pom.xml`文件中添加RabbitMQ...

    aether-impl-1.9.jar.zip

    4. **冲突解决**:当存在多个版本的同名依赖时,Aether可以根据传递性依赖规则来决定使用哪个版本。 5. **插件管理**:除了处理库依赖外,Aether还可以处理Maven构建过程中的插件依赖。 在实际应用中,开发者可以...

    activemq rcp测试例子 不包含依赖库

    至于压缩包中的文件“protobuf-activemq-rpc-1.0.6”,根据命名规则,这可能是protobuf(协议缓冲区)与ActiveMQ RCP结合使用的特定版本库。Protocol Buffers是Google开发的一种数据序列化协议,常用于结构化数据的...

    Json所需6个JAR包(net.sf.ezmorph.MorpherRegistry异常

    在这种情况下,可能需要调整依赖的排除规则,确保只有一个版本的ezmorph被加载。 6. **代码审查**:检查代码中涉及`MorpherRegistry`的部分,确保其使用正确。例如,是否正确地初始化和使用了`MorpherRegistry`,...

    SwitchYard开发搭建文档

    SwitchYard提供的组件和服务包括但不限于:业务流程管理(BPM)、消息传递、规则引擎、安全、事务管理等,这些都使得它成为一个全面的企业服务开发平台。同时,结合JBoss Developer Studio,你可以享受到更加便捷的...

    java微信支付(H5、小程序)实例和SDK

    在`pom.xml`文件中,需要添加微信支付SDK的依赖,这样在编译和运行时,Maven会自动下载并引入这些库,避免手动导入jar包的繁琐过程。例如,添加如下依赖: ```xml <groupId>com.github.openwebnet</groupId> ...

    rabbitmq java使用

    RabbitMQ是一款开源的消息中间件,它遵循AMQP(Advanced Message Queuing Protocol)协议,用于在分布式系统中高效地传递消息。在Java中使用RabbitMQ,你需要掌握以下几个关键知识点: 1. **安装与配置RabbitMQ**:...

    gradle实战源码.zip

    - **排除依赖**:当需要排除某个传递性依赖时,可以使用`exclude`规则。 3. **任务系统** - **任务定义**:Gradle中的任务是构建过程的基本单元,通过`task`关键字创建。 - **任务关系**:使用`dependsOn`定义...

    rabbitmq-java (2).zip

    2. `pom.xml`:这是Maven的项目对象模型(Project Object Model)文件,定义了项目的构建配置,包括依赖、插件、版本信息等。在本项目中,`pom.xml`很可能包含了对RabbitMQ Java客户端库的依赖,使得项目能够连接到...

    Gradle in Action

    - **依赖范围**:例如 `compile`(已废弃)、`implementation`、`runtimeOnly` 等,用于控制依赖的传递范围。 **知识点7:多项目构建** - **多项目结构**:大型项目通常由多个子项目组成,每个子项目都有自己的 `...

    myrabbitmq.rar

    - **Maven**: 项目使用Maven进行依赖管理,添加`rabbitmq-client`依赖到`pom.xml`,确保所有必要的库都已引入。 - **Spring Boot集成**: 如果使用Spring Boot,可以通过`spring-boot-starter-amqp`起步依赖轻松地...

    rabbitmq(java实例)

    -- 最新版本号可能会有所变动,请查阅Maven中央仓库 --> ``` 保存后,Maven会自动下载所需的依赖库。 在RabbitMQ中,我们主要通过`ConnectionFactory`和`Channel`两个关键对象来与消息队列进行交互。`...

    activiti5工作流demo

    在非 Maven 配置下,你可能需要手动添加 Activiti 的依赖库到你的项目中,这包括 Activiti 的核心库、数据库驱动以及其他的依赖。一般来说,你可以在项目的 `lib` 目录下放入对应的 JAR 包,然后在项目配置中指定...

Global site tag (gtag.js) - Google Analytics