`
m635674608
  • 浏览: 4939815 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

maven 传递依赖

 
阅读更多
依赖范围影响传递性依赖(左边第一行标示第一直接依赖范围,对上面第一行标示第二直接依赖范围,中间的交叉单元格标示传递性依赖范围)   compile test provided runtime

compile

compile

---

---

runtime

test

test

---

---

test

provided

provided

---

provided

provided

runtime

runtime

---

---

runtime

  • 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
  • 当第二直接依赖的范围是test的时候,依赖不会得以传递。
  • 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
  • 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;

 A-->C B-->A ==>B-->C(这种依赖是基于compile这个范围进行传递)

     在dependency配置中如果没有写scope默认就是compile范围,依赖的传递主要是针对compile作用域

     依赖的范围:

         test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖

         compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去

         provided范围指的是在编译和测试的过程有效,最后生成war包时不会加入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突

        runtime在运行的时候依赖,在编译的时候不依赖

     依赖冲突

     1、如果a依赖于b的1.0版本,c依赖于b的1.1版本,d依赖于a和c,这时在d的pom中哪一个依赖先写就使用先写依赖的版本

     2、如果a依赖于b的1.0版本,c依赖于b的1.1版本,d依赖于a和c,f依赖于d和c,依赖的路径的长短不一致就选择最小的

    3、如果希望精确的控制依赖包,可以使用依赖的排除功能——>exclusions来排除

 

传递依赖是maven最有特色的、最为方便的优点之一,可以省了很多配置。如a 依赖 b,b 依赖c  默认 a也会依赖 c。但 也会带来隐患,如版本冲突。当然maven也考虑到解决办法,可以使用exclusions来排除相应的重复依赖。

但是我们还会遇到一个严重的问题,那就是,我怎么知道是哪个包的传递依赖产生的冲突 ?那该怎么办呢?当然,maven也会有相应的解决方案。

 首先,你要在pom.xml中加上maven-project-info-reports-plugin插件。

<reporting>
  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>
     maven-project-info-reports-plugin
    </artifactId>
   </plugin>
 </reporting>

 然后再执行:mvn project-info-reports:dependencies 。生成项目依赖的报表,这样你就能够在报表中找出你版本冲突的相关性依赖了。

最后在相应的dependency中加上exclusions来排除相关的传递依赖。

例:

              <dependency>
                        <groupId>jaxen</groupId>
                        <artifactId>jaxen</artifactId>
                        <version>1.1.1</version>
                        <exclusions>
                                <exclusion>
                                        <groupId>com.ibm.icu</groupId>
                                        <artifactId>icu4j</artifactId>
                                </exclusion>
                        </exclusions>
                        <scope>runtime</scope>
                </dependency>

 

分享到:
评论

相关推荐

    Maven传递依赖和依赖的规则.docx

    传递依赖 当存在传递依赖的情况时,主工程对间接依赖的jar可以访问吗? 例如:A.jar依赖于B.jar,而B.jar依赖于C.jar,那么要怎么修改配置文件,才会让A.jar 也依赖 C.jar 呢? 这要看传递依赖的jar包引入时的依赖...

    ojdbc8的maven依赖

    Oracle依赖,maven依赖,ojdbc8的依赖

    Maven 依赖详细理解.pdf

    附件详细的介绍了Maven依赖在POM文件中的表示、依赖范围的含义以及传递性依赖的使用,也包含依赖调解的两个内容。

    rules_maven:具有Bazel的传递Maven依赖项

    声明一个外部工作空间,该工作空间定义了一组Maven工件的传递依赖项。 状态:试验中,但正在其他内部项目中积极使用。 用法 1.将rules_maven添加到您的WORKSPACE git_repository ( name = "org_pubref_rules_...

    depcheck-maven-plugin:Maven插件可检查已使用的未使用的直接和已使用的间接(传递)依赖项

    此目标扫描项目以查找对传递依赖项的类的引用,并将相应的依赖项作为直接依赖项添加到pom.xml中 “帮助” Maven目标 要显示在线帮助,请执行以下操作: # display available goals mvn ...

    maven_部分_源码和思维导图

    01课_maven_初步02课_maven_初步_思路讲解和archetype的使用和eclipse的安装03课_maven_依赖_环境搭建和依赖的范围04课_maven_依赖_传递性依赖的冲突的问题

    war-deps:示例项目演示 Maven 对战争依赖项的传递依赖项处理

    演示如何通过 maven-war-plugin 在 Maven 中处理战争中的传递依赖项的示例项目。 带走的消息是: 向项目添加战争依赖项不会将战争的传递依赖项添加到类路径。 为了将 war 依赖项的传递依赖项添加到类路径,必须...

    Maven入门巨无霸视频教程(2.24G)

    使用Maven核心概念介绍(坐标、依赖、仓库、插件、生命周期等)、Maven与第三方Elicpse整合及如何在Eclipse中使用Maven、什么是私服、Maven为什么...任亮系列-maven依赖传递和可选依赖和排除依赖.mp41313.任亮系列-mav

    dependency-management-plugin:一个Gradle插件,提供类似Maven的依赖项管理功能

    基于配置的依赖项管理,该插件将控制项目的直接和传递依赖项的版本,并将遵守项目依赖项poms中声明的任何排除项以及任何导入的bom。 要了解有关使用Dependency Management插件的更多信息,请参阅其。 贡献 该项目...

    尚硅谷_Maven.doc

    本课程将帮助你了解 Maven 的作用,常用命令,如何配置依赖,以及依赖的范围、依赖的传递性、依赖的排除、生命周期等重要概念,以及继承、聚合这样的 Maven 配置。更会手把手教你在 Eclipse 中玩转 Maven。

    maven系统的思维导图总结

    maven系统的思维导图总结,总结了maven的三大scope,maven的生命周期,eclipse中使用maven,maven中的依赖传递,依赖排除,继承、聚合、自动部署。

    尚硅谷Java视频教程_Maven视频

    · 01....依赖的传递性 · 28.依赖的排除 · 29.依赖的原则说明 · 30.依赖的原则测试 · 31.统一管理依赖的版本号 · 32.继承 · 33.聚合 · 34.Web工程的自动部署 · 35.查找依赖信息的网站

    dependency-metadata-maven-plugin:Maven 依赖元数据插件

    依赖元数据 Maven 插件多用途 maven 依赖元数据处理插件,旨在解析直接和可传递 maven 项目依赖项的元数据并对其采取行动。 此插件的最初用例是能够弃用内部生产的库,但绝对不限于此。 元数据被序列化为 JSON 文件...

    mabel:Bazel的Maven依赖图生成器

    马贝尔 Bazel的另一个Maven依赖图生成器。 该WORKSPACE将提供mabel_... 生成所需的Java规则(具有传递依赖项)。 自动检测要为给定依赖性创建的规则类型: aar_import用于Android工件。 用于注释处理器的java_plugin +

    maven window下安装包

    第5章:坐标和依赖/5.6 传递性依赖 第5章:坐标和依赖/5.7 依赖调解 第5章:坐标和依赖/5.8 可选依赖 第5章:坐标和依赖/5.9 最佳实践/5.9.1 排除依赖 第5章:坐标和依赖/5.9 最佳实践/5.9.2 依赖属性使用变量 第5章...

    Maven2 的新特性.7z

    在Maven2中实现了传递依赖,如此对于Hibernate所依赖的包,Maven2会自动下载,开发人员只需关心Hibernate即可。 注意:只有得到Maven支持的依赖,通常是plugin形式出现,才能获得这个特性。而且对于一些老的plugin,...

    Maven权威指南 很精典的学习教程,比ANT更好用

    Maven依赖管理 (Dependency Management) 3.5.6. 站点生成和报告 (Site Generation and Reporting) 3.6. 小结 4. 定制一个Maven项目 4.1. 介绍 4.1.1. 下载本章样例 4.2. 定义Simple Weather项目 4.2.1...

    gradle-dmt-plugin:一个Gradle插件,提供类似Maven的依赖项管理功能

    Gradle DMT插件介绍一个Gradle插件,... 基于配置的依赖项管理,该插件将控制项目的直接和传递依赖项的版本,并将遵守项目依赖项poms中声明的任何排除项以及所有导入的bom。执照Gradle DMT插件是根据发布的开源软件。

    maven-jpackage-template:示例项目,说明在使用本机安装程序的同时仍使用标准Maven依赖系统的情况下,构建基于JavaFX的小型跨平台小型桌面应用程序

    使用标准的Maven依赖系统自动管理普通的JAR依赖(包括传递Maven依赖)。 使用自动生成问题提供不错的小型安装程序的jlink / jpackage工具依赖于新的Java模块系统。 该系统很难使用,因为它期望Java库添加模块信息...

Global site tag (gtag.js) - Google Analytics