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. 【python】10分钟教你用Python做个打飞机小游戏超详细教程

    更多精彩尽在微信公众号[程序猿声] 我知道你们一定想先看效果如何 00 目录 整体框架 开始之前-精灵类Sprite 子弹类class Bullet 玩家飞机类class Player 敌机类clas ...

  2. HDU - 5996 树上博弈 BestCoder Round #90

    就是阶梯NIM博弈,那么看层数是不是奇数的异或就行了: #include<iostream> #include<cstdio> #include<algorithm> ...

  3. α测试,Beta测试

    α测试(内测)是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试.α测试的目的是评价软件产品的FLURPS(即功能.局域化.可使用性.可靠性.性能和支持).尤其注 ...

  4. 【算法笔记】B1042 字符统计

    1042 字符统计 (20 分) 请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空 ...

  5. bzoj2212 Tree Rotations 线段树合并+动态开点

    题目传送门 思路: 区间合并线段树的题,第一次写,对于一颗子树,无论这个子树怎么交换,都不会对其他子树的逆序对造成影响,所以就直接算逆序对就好. 注意叶子节点是1到n的全排列,所以每个权值都只会出现1 ...

  6. HDU - 3949 线性基应用

    题意:求第\(k\)小的异或和 要点: 1.线性基能表示原数组的任意异或和,但不包括0,需特判(flag) 2.线性基中的异或组合只有\(2^{|B|}-1\)个,如果可以异或为0,则组合数为\(2^ ...

  7. es6 封装一个登录注册的验证滑块

    1,需求分析 滑块从左滑到右,开始滑.结束滑两种状态.两种状态显示的内容和样式的不同. 这是淘宝注册验证滑块的示例图 2,代码分析 const render = Symbol('render') co ...

  8. Spring 操作 jdbc 链接数据库

    1. 新建资源文件 db.properities jdbc.user=root jdbc.password=root jdbc.driverClass=com.mysql.jdbc.Driver jd ...

  9. Scala 中 for 循环 和 generator 的使用例子

    这个例子是,从每个list中,找到age最大的那个node. class Node(vName: String, vAge: Int) { // Entity class var name: Stri ...

  10. MySql——安装与配置与启动和停止

    在Linux上安装mysql数据库,我们可以去其官网上下载mysql数据库的rpm包,http://dev.mysql.com/downloads/mysql/5.6.html#downloads,大 ...