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>
相关推荐
传递依赖 当存在传递依赖的情况时,主工程对间接依赖的jar可以访问吗? 例如:A.jar依赖于B.jar,而B.jar依赖于C.jar,那么要怎么修改配置文件,才会让A.jar 也依赖 C.jar 呢? 这要看传递依赖的jar包引入时的依赖...
Oracle依赖,maven依赖,ojdbc8的依赖
附件详细的介绍了Maven依赖在POM文件中的表示、依赖范围的含义以及传递性依赖的使用,也包含依赖调解的两个内容。
声明一个外部工作空间,该工作空间定义了一组Maven工件的传递依赖项。 状态:试验中,但正在其他内部项目中积极使用。 用法 1.将rules_maven添加到您的WORKSPACE git_repository ( name = "org_pubref_rules_...
此目标扫描项目以查找对传递依赖项的类的引用,并将相应的依赖项作为直接依赖项添加到pom.xml中 “帮助” Maven目标 要显示在线帮助,请执行以下操作: # display available goals mvn ...
01课_maven_初步02课_maven_初步_思路讲解和archetype的使用和eclipse的安装03课_maven_依赖_环境搭建和依赖的范围04课_maven_依赖_传递性依赖的冲突的问题
演示如何通过 maven-war-plugin 在 Maven 中处理战争中的传递依赖项的示例项目。 带走的消息是: 向项目添加战争依赖项不会将战争的传递依赖项添加到类路径。 为了将 war 依赖项的传递依赖项添加到类路径,必须...
使用Maven核心概念介绍(坐标、依赖、仓库、插件、生命周期等)、Maven与第三方Elicpse整合及如何在Eclipse中使用Maven、什么是私服、Maven为什么...任亮系列-maven依赖传递和可选依赖和排除依赖.mp41313.任亮系列-mav
基于配置的依赖项管理,该插件将控制项目的直接和传递依赖项的版本,并将遵守项目依赖项poms中声明的任何排除项以及任何导入的bom。 要了解有关使用Dependency Management插件的更多信息,请参阅其。 贡献 该项目...
本课程将帮助你了解 Maven 的作用,常用命令,如何配置依赖,以及依赖的范围、依赖的传递性、依赖的排除、生命周期等重要概念,以及继承、聚合这样的 Maven 配置。更会手把手教你在 Eclipse 中玩转 Maven。
maven系统的思维导图总结,总结了maven的三大scope,maven的生命周期,eclipse中使用maven,maven中的依赖传递,依赖排除,继承、聚合、自动部署。
· 01....依赖的传递性 · 28.依赖的排除 · 29.依赖的原则说明 · 30.依赖的原则测试 · 31.统一管理依赖的版本号 · 32.继承 · 33.聚合 · 34.Web工程的自动部署 · 35.查找依赖信息的网站
依赖元数据 Maven 插件多用途 maven 依赖元数据处理插件,旨在解析直接和可传递 maven 项目依赖项的元数据并对其采取行动。 此插件的最初用例是能够弃用内部生产的库,但绝对不限于此。 元数据被序列化为 JSON 文件...
马贝尔 Bazel的另一个Maven依赖图生成器。 该WORKSPACE将提供mabel_... 生成所需的Java规则(具有传递依赖项)。 自动检测要为给定依赖性创建的规则类型: aar_import用于Android工件。 用于注释处理器的java_plugin +
第5章:坐标和依赖/5.6 传递性依赖 第5章:坐标和依赖/5.7 依赖调解 第5章:坐标和依赖/5.8 可选依赖 第5章:坐标和依赖/5.9 最佳实践/5.9.1 排除依赖 第5章:坐标和依赖/5.9 最佳实践/5.9.2 依赖属性使用变量 第5章...
在Maven2中实现了传递依赖,如此对于Hibernate所依赖的包,Maven2会自动下载,开发人员只需关心Hibernate即可。 注意:只有得到Maven支持的依赖,通常是plugin形式出现,才能获得这个特性。而且对于一些老的plugin,...
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插件介绍一个Gradle插件,... 基于配置的依赖项管理,该插件将控制项目的直接和传递依赖项的版本,并将遵守项目依赖项poms中声明的任何排除项以及所有导入的bom。执照Gradle DMT插件是根据发布的开源软件。
使用标准的Maven依赖系统自动管理普通的JAR依赖(包括传递Maven依赖)。 使用自动生成问题提供不错的小型安装程序的jlink / jpackage工具依赖于新的Java模块系统。 该系统很难使用,因为它期望Java库添加模块信息...