1.依赖配置

  1. <project>
  2. ...
  3. <dependencies>
  4. <dependency>
  5. <groupId>xx</groupId>
  6. <artifactId>com.yy.xx</artifactId>
  7. <version>..</version>
  8. <type>..</type>
  9. <scope>...</scope>
  10. <option></option>
  11. <exclusions>
  12. <exclusion>
  13. ....
  14. </exclusion>
  15. </exclusions>
  16. </dependency>
  17. </dependencies>
  18.  
  19. </project>

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

2.依赖范围

  1. <dependencies>
  2. <dependency>
  3. <groupId>xx</groupId>
  4. <artifactId>com.test.xx</artifactId>
  5. <scope>test</scope>
  6. </dependency>
  7. </dependencies>

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

  1. <dependencies>
  2. <dependency>
  3. <groupId>xx</groupId>
  4. <artifactId>com.test.xx</artifactId>
  5. <scope>system</scope>
  6. <systempath>${java.home}/lib/xx.jar</systempath>
  7. </dependency>
  8. </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可通过*排除所有依赖,也可以排除一个,或者多个。

  1. <dependencies>
  2. <!--排除所有传递依赖-->
  3. <dependency>
  4. <groupId>xx</groupId>
  5. <artifactId>com.yy.xx</artifactId>
  6. <version>..</version>
  7. <exclusions>
  8. <exclusion>
  9. <groupId>*</groupId>
  10. <artifactId>*</artifactId>
  11. </exclusion>
  12. </exclusions>
  13. </dependency>
  14. <!--排除一个或者 多个传递依赖-->
  15. <dependency>
  16. <groupId>xx</groupId>
  17. <artifactId>com.yy.xx</artifactId>
  18. <version>..</version>
  19. <exclusions>
  20. <exclusion>
  21. <groupId>x1</groupId>
  22. <artifactId>com.xx.x1</artifactId>
  23. </exclusion>
  24. <exclusion>
  25. <groupId>xn</groupId>
  26. <artifactId>com.xx.xn</artifactId>
  27. </exclusion>
  28. </exclusions>
  29. </dependency>
  30. </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. centos7 docker 安装 zookeeper 3.4.13 集群

    假设三台主机的ip分别为: 主机一:192.168.0.168 主机二:192.168.0.169 主机三:192.168.0.170 三台主机的安装步骤相似,以主机一为例: 1. 查找zookeep ...

  2. Python3之shutil模块

    一. 简介 shutil 是高级的文件,文件夹,压缩包处理模块. 二. 使用 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中 import ...

  3. luogu5212/bzoj2555 substring(后缀自动机+动态树)

    对字符串构建一个后缀自动机. 每次查询的就是在转移边上得到节点的parent树中后缀节点数量. 由于强制在线,可以用动态树维护后缀自动机parent树的子树和. 注意一个玄学的优化:每次在执行连边操作 ...

  4. undefined reference to symbol ‘_ZN2cv6String10deallocateEv

    使用qt编译Caffe时出现如下错误: undefined reference to symbol '_ZN2cv6String10deallocateEv' error adding symbols ...

  5. 找出数组中的最小值(es5/es6)

    1.命令式编程,只需要迭代数组,检查当前最小值是否大于数组元素,如果是更新最小值即可. var s = [2,3,4,5,6,7,8]; for(var i=0,m=s.length;i<m;i ...

  6. ThinkPHP vendor 方法导入第三方类库

    ThinkPHP 3.2 vendor()方法的深入研究及Phpqrcode的正确扩展 ThinkPHP vendor 方法导入第三方类库 第三方类库 第三方类库指除了 ThinkPHP 框架.应用项 ...

  7. 计算两个日期相差的天数 js php日期 减一年

    计算两个日期相差的天数 //sDate1和sDate2是yyyy-MM-dd格式 function dateDiff(sDate1, sDate2) { var aDate, oDate1, oDat ...

  8. javascript格式化时间(几秒钟前,几分钟前,几小时前,几天前...)

    beautify_time: function(timestamp) { var mistiming = Math.round(new Date() / 1000) - timestamp; var ...

  9. js 中 forEach 和 map

    共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input. 3.匿名 ...

  10. 设计模式学习总结(七)适配器模式(Adapter)

    适配器模式主要是通过适配器来实现接口的统一,如要实现国内手机在国外充电,则需要在不同的国家采用不同的适配器来进行兼容! 一.示例展示: 以下例子主要通过给笔记本电脑添加类似手机打电话和发短信的功能来详 ...