其实一个依赖声明可以包含如下的一些元素:

groupId,artifactId,version:依赖的基本坐标。

type:依赖的类型,对应于项目坐标定义的packaging。大多数情况下,该元素不必声明,其默认值为jar。

scope:依赖的范围。

optional:标记依赖是否可选。

exclusions:用来排除传递性依赖。

-----------------------------------------------------------------------

依赖范围

依赖范围就是用来控制依赖与三种classpath(编译classpath,测试classpath,运行classpath)的关系,Maven有以下几种依赖范围:

compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译,测试和运行三种classpath都有效,典型的例子是spring-core。

test:测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,典型的例子是JUnit。

provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效,典型的例子是servlet-api。

runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效,典型的例子是jdbc驱动实现。

system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。但是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。systemPath元素可以引用环境变量,如:

 <dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>

import:导入依赖范围。该依赖范围不会对三种classpath产生实际的影响。后面的文章在讲解dependencyManagement时会详细讨论此依赖范围。

-----------------------------------------------------------------

依赖调解的两条原则:

1. 路径最近者优先。

2. 第一声明者优先。

--------------------------------------------------------------------

 传递性依赖的规律

1. 当第二直接依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。

2. 当第二直接依赖的范围是test的时候,依赖不会得以传递。

3. 当第二直接依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为provided。

4. 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递性依赖的范围是runtime。

Maven-02: 依赖的更多相关文章

  1. Maven 3-Maven依赖版本冲突的分析及解决小结 (阿里,美团,京东面试)

    举例A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过<scope>等若干种方式控制传递依赖).这里 ...

  2. [转]使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://repo1.maven.org/maven2 。

    使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://re ...

  3. Maven间接依赖冲突解决办法

    如果项目中maven依赖太多,由于还有jar之间的间接依赖,所以可能会存在依赖冲突.依赖冲突大部分都是由于版本冲突引起的,查看maven的依赖关系,可以找到引起冲突的间接依赖 如上图,通过Depend ...

  4. maven 检查依赖冲突和版本冲突

    maven 检查依赖冲突和版本冲突   在项目发布的时候,一般都需要进行依赖冲突检查或者重复类的检查,这个时候我一般会使用下面的两个命令:   1 2 3 mvn -U clean package - ...

  5. maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)

    我们知道,maven的依赖关系是有传递性的.如:A-->B,B-->C.但有时候,项目A可能不是必需依赖C,因此需要在项目A中排除对A的依赖.在maven的依赖管理中,有两种方式可以对依赖 ...

  6. Maven的依赖范围

    Maven的依赖构件包含一个依赖范围属性,这个属性描述的是三套classpath的控制,即编译.测试.运行. 举个例子Junit依赖只是在测试范围(classpath)使用,而在运行的时候不使用,还有 ...

  7. Idea maven tomcat 配置热更新 以及 maven jar依赖

    看了视频 实在忍不住上了idea的贼船 不过这玩意确实有点坑爹,因为用的人少,所以很多配置是有问题的 例如maven配置tomcat热更新 以及tomcat的maven配置 我这里放几张图作为备用 配 ...

  8. Eclipse+Maven构建web项目及部署时Maven lib依赖问题的解决

    目录 Eclipse中m2e插件构建web项目的步骤 Maven工具构建web项目再导入Eclipse的步骤 [一].Eclipse中m2e插件构建web项目的步骤 第一步:创建项目,按照 New – ...

  9. Maven入门-4.Maven的依赖

    1.Maven的依赖1.1 添加依赖1.2 依赖范围(sope)依赖范围与classpath的关系1.3 依赖的传递性1.2.1 依赖传递性的冲突问题1. 第一种情况2. 第二种情况1.2.2 通过e ...

  10. maven的依赖特性

    若排版紊乱可查看我的个人博客原文地址 maven的依赖特性很多很杂,这里大概总结一下,maven的依赖特性主要是依赖范围和传递依赖,前者会影响后者,这篇文章会介绍传递依赖的传递原则,出现冲突传递依赖默 ...

随机推荐

  1. http缓存(http caching)

    通过使用缓存web网站和web应用的性能能够得到显著的提升.Web caches能够减小延迟和网络流量,从而缩短展示资源所花费的时间. 在http中控制缓存行为的首部字段是Cache-Control, ...

  2. 网络基础tcp/ip协议二

    物理层解析: 物理层是TCP/IP模型的最低层,物理层为数据提供数据传输可靠通路. 物理层关心的介质: 信号 接口 传输介质 信号的分类:(信号是信息传递的媒介.) 模拟信号:连续变化的物理量 数字信 ...

  3. DirectDraw读书笔记

    DirectDraw对象 DirectDraw对象是DirectDraw应用程序的核心.它是你在建立DirectDraw应用程序时所要创建的第一个对象,再用它来创建所有其它相关的对象.通过调用Dire ...

  4. hi3531结构: VB_CONF_S

    定义视频缓存池属性结构体. typedef struct hiVB_CONF_S {        HI_U32 u32MaxPoolCnt; /* max count of pools, (0,VB ...

  5. JXL组件生成报表报错(一)

    JXL组件生成报表 1.具体报错如下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonami ...

  6. java,while循环的使用,接收用户的输入,进行不同的操作!

    package cn.edu.nwpu.java; import java.util.Scanner; public class IsoscelesTriangle { public static v ...

  7. Django学习-12-模板继承

    对于一下3个HTML页面         url(r'^templates1/', views.templates1),         url(r'^templates2/', views.temp ...

  8. Java 第一章 初识Java

    第一章笔记 什么是计算机程序:算机为完成某些功能生产的一系列有序指令集合 Java技术包括: java SE:标准版 java EE:企业版 Java ME:移动版 开发Java程序步骤:1.编写 2 ...

  9. 经典面试问题: Top K 之 ---- 海量数据找出现次数最多或,不重复的。

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  10. pycharm short-cut

    Ctrl + the left mouse button Ctrl + Alt + Left/Right if invalid, system setting