maven学习系列——(七)Dependency

2024-05-19 00:08
文章标签 maven 学习 系列 dependency

本文主要是介绍maven学习系列——(七)Dependency,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Dependency介绍

本文转自:Maven简介(六)——Dependency,并加上自己在实际使用中的总结和说明!

1、依赖的传递性

依赖传递对版本的选择

假设A依赖于B和C,然后B依赖于D,D又依赖于E1.0,C直接依赖于E2.0,那么这个时候A依赖的是E1.0还是E2.0,还是这两个都依赖呢?两个都依赖是肯定不行的,因为它们可能会有冲突的地方。这个时候就涉及到Maven中依赖传递对版本的选择问题。依赖传递在选择版本的时候首先是根据深度选择的。当一个项目同时经过不同的路径依赖于同一个组件时,会选择其深度最短的对应组件进行依赖。

举例来说:
第一种情况:

  • A->B->C->D1.0
  • A->E->D2.0

那么这个时候A就会选择对D 相对路径短 的组件来进行依赖,也就是D2.0

那么当深度一样的时候Maven会如何选择呢?

  • A->B->D1.0
  • A->C->D2.0

这个时候Maven会如何选择A所依赖的D的版本呢?

这种情况Maven会根据申明的依赖顺序来进行选择,先申明的会被作为依赖包。像前面这种情况,如果先申明对B的依赖,则A依赖的就是D1.0;如果先申明对C的依赖,则A依赖的就是D2.0。

总结:
1、路径相同的情况,会根据申明的依赖顺序来进行选择,先申明的会被作为依赖包。
2、路径不同的情况,采用 深度最短的对应组件进行依赖。

使用exclusion排除依赖

假设有这样一种依赖关系,A->B->C,这个时候由于某些原因,我们不需要对C的依赖,但是我们又必须要对B的依赖,这个时候该怎么办呢?针对这种情况,Maven给我们提供了一个exclusion功能,我们可以在添加A对B的依赖时申明不需要引进B对C的依赖。具体做法如下:

<dependencies>  <dependency>  <groupId>groupB</groupId>  <artifactId>artifactB</artifactId>  <version>1.0</version>  <exclusions>  <exclusion>  <groupId>groupC</groupId>  <artifactId>artifactC</artifactId>  </exclusion>  </exclusions>  </dependency>  ...  
</dependencies>  

总结:
exclusions: 在实际项目中使用的还是比较多,可以解决:
1、依赖传递问题
2、版本冲突问题

2、 依赖项的作用域

test:表示该依赖项只对测试时有用,包括测试代码的编译和运行,对于正常的项目运行是没有影响的。
比如:Junit jar、Spring-test jar

provided:表示该依赖项将由JDK或者运行容器在运行时提供,也就是说由Maven提供的该依赖项我们只有在编译和测试时才会用到,而在运行时将由JDK或者运行容器提供
比如:servlet-api jar

compile这是依赖项的默认作用范围,即当没有指定依赖项的scope时默认使用compile。compile范围内的依赖项在所有情况下都是有效的,包括运行、测试和编译时。

runtime:表示该依赖项只有在运行时才是需要的,在编译的时候不需要。这种类型的依赖项将在运行和test的类路径下可以访问。
比如:mysql-connector-java jar

3、dependencyManagement介绍

使用的配置如下:

<project>  ...  <dependencyManagement>  <dependencies>  <dependency>  <groupId>groupC</groupId>  <artifactId>artifactC</artifactId>  <version>1.0</version>  </dependency>  <dependency>  <groupId>groupD</groupId>  <artifactId>artifactD</artifactId>  <version>1.0</version>  </dependency>  <dependency>  <groupId>groupE</groupId>  <artifactId>artifactE</artifactId>  <version>1.0</version>  <type>bar</type>  </dependency>  </dependencies>  </dependencyManagement>  ...  
</project>


总结:
1、集中管理依赖项和依赖项使用的版本进行统一管理。
2、子项目需要直接引用才有能引入自己需要的依赖包,不需要在写版本号!
3、开源项目中使用较多,这个在大型项目或者jar依赖较多的项目必须使用!!!一定要学会使用方法。

子项目使用方法:

<dependencies>  <dependency>  <groupId>groupC</groupId>  <artifactId>artifactC</artifactId>  <!-- 不需要指定版本,会依赖父类统一管理版本--></dependency>  
</dependencies>  

这篇关于maven学习系列——(七)Dependency的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995706

相关文章

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Maven中的profiles使用及说明

《Maven中的profiles使用及说明》:本文主要介绍Maven中的profiles使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录主要用途定义 Profiles示例:多环境配置激活 Profiles示例:资源过滤示例:依赖管理总结Maven 中的

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

maven私服配置全过程

《maven私服配置全过程》:本文主要介绍maven私服配置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录使用Nexus作为 公司maven私服maven 私服setttings配置maven项目 pom配置测试效果总结使用Nexus作为 公司maven私

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

IDEA中Maven Dependencies出现红色波浪线的原因及解决方法

《IDEA中MavenDependencies出现红色波浪线的原因及解决方法》在使用IntelliJIDEA开发Java项目时,尤其是基于Maven的项目,您可能会遇到MavenDependenci... 目录一、问题概述二、解决步骤2.1 检查 Maven 配置2.2 更新 Maven 项目2.3 清理本

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

maven中的maven-antrun-plugin插件示例详解

《maven中的maven-antrun-plugin插件示例详解》maven-antrun-plugin是Maven生态中一个强大的工具,尤其适合需要复用Ant脚本或实现复杂构建逻辑的场景... 目录1. 核心功能2. 典型使用场景3. 配置示例4. 关键配置项5. 优缺点分析6. 最佳实践7. 常见问题

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.