1.依赖配置

<project>
...
<dependencies>
<dependency>
<groupId>xx</groupId>
<artifactId>com.yy.xx</artifactId>
<version>..</version>
<type>..</type>
<scope>...</scope>
<option></option>
<exclusions>
<exclusion>
....
</exclusion>
</exclusions>
</dependency>
</dependencies> </project>

说明:
groupId,artifactId,version :依赖的基本坐标
type:依赖的类型,默认为jar
scope:依赖的范围
option: 标记依赖是否可选
exclusions:排除传递性依赖

2.依赖范围

<dependencies>
<dependency>
<groupId>xx</groupId>
<artifactId>com.test.xx</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

1》comile:编译时依赖
2》test:测试时依赖
3》provided:已提供依赖范围,编译、测试生效,运行时不生效(例如servlet-api在tomcat中已经自带了,因此运行时不需要重复依赖)
4》runtime:运行时依赖,仅对测试、运行生效,编译不生效。
5》system:直接指定依赖的文件路径,和provided范围相同

<dependencies>
<dependency>
<groupId>xx</groupId>
<artifactId>com.test.xx</artifactId>
<scope>system</scope>
<systempath>${java.home}/lib/xx.jar</systempath>
</dependency>
</dependencies>

6>import:导入依赖范围

3.传达性依赖(间接依赖)

A-->B-->C  A依赖B,B又依赖C,那么A会通过B将C也会依赖过去。

传递依赖的范围取决于第一依赖的范围和第二依赖的范围(左边是第一依赖范围,上面是第二依赖范围,交叉部分为传递依赖范围)

4.依赖调解

1》A->B->E->C1.0,  A->D->C2.0   : 此时A会依赖C1还是C2 ?

---依赖原则1:路径最近者优先

2》A->B->Y1.0, A->C->Y2.0   : 此时A会依赖Y1还是Y2  ?

---依赖原则2:第一声明优先

5.可选依赖

A->B, B->X(可选), B->Y(可选)

如果3者依赖范围都是compile,则X,Y都是A的compile的依赖范围,但是由于X/Y都是可选依赖,所以X,Y不会被传递

6.排除依赖

exlusions可通过*排除所有依赖,也可以排除一个,或者多个。

<dependencies>
<!--排除所有传递依赖-->
<dependency>
<groupId>xx</groupId>
<artifactId>com.yy.xx</artifactId>
<version>..</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--排除一个或者 多个传递依赖-->
<dependency>
<groupId>xx</groupId>
<artifactId>com.yy.xx</artifactId>
<version>..</version>
<exclusions>
<exclusion>
<groupId>x1</groupId>
<artifactId>com.xx.x1</artifactId>
</exclusion>
<exclusion>
<groupId>xn</groupId>
<artifactId>com.xx.xn</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

7.依赖优化

mvn dependency:list   查看依赖列表

mvn dependency:tree >a.txt   查看依赖树,生成a.txt

mvn dependency:analyze

依赖分析:展示结果有两部分

1>Used undeclared dependencies : 表示项目中使用到了,但是没有显示声明的依赖

2>Unused declared dependecies :  表示项目中未使用到,但是显示声明了的依赖,不能简单直接删除需要分析一下scope

dependency:analyze只能分析编译、和测试范围的依赖。

Maven学习篇一:依赖了解的更多相关文章

  1. maven学习笔记三(依赖特性,作用域)

    上一章中  我们看到了添加了个junit的依赖包.那么maven中想添加依赖的jar包我们只需要配置相应的dependency就行.例如: <dependency> <groupId ...

  2. maven学习记录二——依赖管理

    5       依赖管理 Jar包的管理 需求:整合struts2   页面上传一个客户id 跳转页面 5.1     添加依赖: 打开maven仓库的视图: 5.2     重建索引 1.  创建m ...

  3. Maven学习篇一:eclipse构建运行maven web项目

    1.new->other->maven project->next 2.选择创建简单项目(或者直接去掉勾,在后面选择maven-archetype-webapp) 3.设置坐标,名称 ...

  4. Maven提高篇系列之(五)——处理依赖冲突

    这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...

  5. Maven学习笔记—坐标和依赖

    Maven的坐标和依赖 1 Maven坐标 1.1 什么是Maven坐标 Maven坐标:世界上任何一组构件都可以使用Maven坐标来唯一标识,Maven坐标的元素包括groupId.artifact ...

  6. maven 学习---Maven外部依赖

    现在,你也知道Maven做依赖管理使用Maven仓库的概念.但是,如果依赖是不提供任何远程存储库和中央存储库发生了什么? Maven提供为使用外部依赖的概念,应用在这样的场景. 举一个例子,让我们做以 ...

  7. Maven学习-目录结构

    在前一篇文章中,我们介绍了什么是Maven,以及如何用Maven来构建我们的项目.不了解Maven的童鞋,可以看这里Maven学习-入门.在这篇文章中,我们将学习Maven的项目的目录结构相关的内容. ...

  8. Maven提高篇系列之(三)——使用自己的Repository(Nexus)

    这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...

  9. Maven学习(三) -- 仓库

    标签(空格分隔): 学习笔记 坐标和依赖时任何一个构件在Maven世界中的逻辑表示方式:而构件的物理表示方式是文件,Maven通过仓库来同意管理这些文件. 任何一个构件都有其唯一的坐标,根据这个坐标可 ...

随机推荐

  1. linux下 zip解压 tar解压 gz解压 bz2等各种解压文件命令

    .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压 ...

  2. 简述ref与out区别

    1.相同点:两者都是按地址(引用)传递的,使用后都将改变原来参数的数值. 2.区别:ref可以把参数的数值传递进函数,但是out是要把参数清空(声明时不必显示初始化),就是说你无法把一个数值从out传 ...

  3. HDU-1754-I Hate It(线段树 单点更新 区间最大值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. 剩下的树 THU 机试

    链接:https://www.nowcoder.com/questionTerminal/f5787c69f5cf41499ba4706bc93700a2来源:牛客网 有一个长度为整数L(1<= ...

  5. 精通 WPF UI Virtualization (提升 OEA 框架中 TreeGrid 控件的性能)

    原文:精通 WPF UI Virtualization (提升 OEA 框架中 TreeGrid 控件的性能) 本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提 ...

  6. Jmeter函数作用域实时取值覆盖[针对HTTP Request等控制器]

    jmeter的属性和变量可以简单理解为编程里面的全局变量和局部变量.属性是全局可见,可以跨线程组传递调用,而变量基本上只能存在于一个线程组中(在测试计划定义的变量也是可以跨线程组传递的).同线程组内的 ...

  7. 【算法笔记】B1012 数字分类

    1012 数字分类 (20 分) 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A​1​​ = 能被 5 整除的数字中所有偶数的和: A​2​​ = 将被 5 除后余 1 的数字 ...

  8. ZOJ - 2402 DP方案数

    题意:给出m,序列第i位是第i-1位的至少2倍大,的求长度为n且每一位范围均在1-m的序列方案数 对求方案数做不到信手拈来的感觉,需要加强 用简单的预处理和最优子结构能优化到很不错的效率了 #incl ...

  9. DictionaryHelper2

    /// <summary> /// DictionaryHelper /// </summary> public static class DictionaryHelper { ...

  10. [转] 用javascript修改css伪类的几种方法

    用javascript修改css伪类的几种方法: Modify pseudo element styles with JavaScript http://pankajparashar.com/post ...