博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
写给初学者的Maven教程——05依赖管理
阅读量:3959 次
发布时间:2019-05-24

本文共 1171 字,大约阅读时间需要 3 分钟。

写给初学者的Maven教程——05依赖管理

一.scope依赖范围

在讲解scope范围之前我们不得不讲一下依赖关系,在Maven中存在三种依赖关系:依赖和编译,测试,运行的classpath的关系

有些依赖(就是我们的jar包)只用于测试,比如junit;有些依赖编译用不到,只有运行的时候才能用到,比如mysql的驱动包在编译期就用不到(编译期用的是JDBC接口),而是在运行时用到的;还有些依赖,编译期要用到,而运行期不需要提供,因为有些容器已经提供了,比如servlet-api在tomcat中已经提供了,我们只需要的是编译期提供而已。那么在<dependency>中还引入了<scope>,它主要管理依赖的部署。大致有compile、provided、runtime、test、几个取值

在这里插入图片描述

compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效.

test:测试依赖范围。只对于测试classpath有效.
provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
runtime:运行时提供。例如:jdbc驱动

通过对上面这些值的配置可以指定我们的依赖jar包的作用范围(重点掌握前三个),其中compile是默认值。当然我相信讲了这么多你可能还是一脸懵逼,没关系,接下来我会在后面讲解例子。

二.依赖传递

首先了解直接依赖间接依赖。前面我们创建了testtest2两个工程,其中test2依赖与test,这就是直接依赖,现在我们假设有了第三个项目test3,他依赖test2,那么我们可以称之为test3直接依赖于test2,间接依赖于test。接下来我们先讲讲scopecompiletest时的效果。

比如在test2里面配置了Junit依赖,他的scope为compile(默认的可以不配置),那么在test3里面配置了test2的依赖,那么test3就可以不用配置Junit依赖了。如果范围是test那就需要配置Junit依赖。provided与runtime用的比较少这里就不讲解了。

三.依赖冲突

假如test1使用junit4.10依赖,并且scope是compile,那test2,test3都可以使用test1的junit4.10,因为传递下来了。假如test2使用junit4.9依赖,那test3会用junit4.9,这是一个就近的原则。

四.可选依赖

可选依赖是通过下面的这个<optional>标签来实现的,取值为truefalse,true表示不可以向下传递依赖,false表示可以向下传递依赖。(这里一定要注意这个可以不可以

在这里插入图片描述

五.排除依赖

在test3中排除test的依赖

在这里插入图片描述

转载地址:http://palzi.baihongyu.com/

你可能感兴趣的文章
软件设计基础
查看>>
UML的基本结构
查看>>
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
查看>>
用例图(UseCase Diagram)—UML图(一)
查看>>
类图(Class diagram)—UML图(二)
查看>>
对象图(Object Diagram)—UML图(三)
查看>>
活动图(Activity Diagram)—UML图(四)
查看>>
状态图(Statechart Diagram)—UML图(五)
查看>>
时序图(Sequence Diagram)—UML图(六)
查看>>
构件图(Component Diagram)—UML图(八)
查看>>
部署图(Deployment Diagram)—UML图(九)
查看>>
协作图(Collaboration Diagram)—UML图(七)
查看>>
什么是RUP
查看>>
什么是UML(UML总结)
查看>>
UML基础与应用系列文章汇总
查看>>
C#方法重载(overload)方法重写(override)隐藏(new)
查看>>
javascript实现滚动图片
查看>>
css+div练手-工作室
查看>>
CSS+DIV布局之道
查看>>
CSS+DIV练手-公司
查看>>