转载自 Maven精选系列--依赖范围、传递、排除

添加依赖

下面我添加了一个spring-web的依赖,maven就会去下载spring-web的jar包及它依赖的一些jar包。

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>4.2.5.RELEASE</version>

<scope>compile</scope>

</dependency>

</dependencies>

依赖范围

依赖配置中有一个scope之前没讲过,它就是依赖范围。什么是依赖范围就是指定你这个jar包在哪个阶段时才有效。

  • compile - 编译依赖范围。默认的范围,可以不填,表示在所有过程中都有效,如编译期、测试过程中、运行期间等。

  • provided - 已提供依赖范围。这个范围表示只提供编译和测试阶段有效,运行期间不需要,像tomcat等容器本身已经提供的servlet-api等。

  • runtime - 运行时依赖范围。这个范围表示只有在运行和测试期间才有效,编译期间不需要,像连接数据库的jdbc驱动程序等。

  • test - 测试依赖范围。这个范围只有测试阶段有效,编译和运行不需要,像单元测试提供的junit包。

  • system - 系统依赖范围。这个范围表示不依赖本地仓库,jar在其他的目录,需要通过systemPath指定路径,这个不建议使用。

  • import - 引用依赖范围。Maven2.0.9之后新增的范围,只能用在<dependencyManagement>中,并且导入的type为pom类型的父工程配置,一般用来解决多继承问题。

依赖传递

依赖的传递前面讲过通过继承和聚合的方式可以达到,通过继承的方式可以轻松的从父项目继承过来,通过聚合的方式也可以间接的传递过来。

继承:A继承B,A就可以继承B的dependencies依赖。

聚合:A依赖C,C依赖D,那么A就要依赖D自然也就获取了D的依赖。

下面这是dubbo的直接依赖和所有间接依赖的关系列表。

依赖排除

在依赖传递过程中,如A依赖B、S2.0,B依赖C、S1.0,这样A就有了S1.0和S2.0两个依赖,这样某些情况下会造成冲突需要手动把B间接传递过来的依赖排除掉,就是不依赖B带过来的S1.0的包。

<dependency>

<groupId>org.testgroupId>

<artifactId>B</artifactId>

<version>1.0</version>

<exclusions>

<exclusion>

<groupId>com.test</groupId>

<artifactId>S</artifactId>

</exclusion>

</exclusions>

</dependency>

排除所有间接依赖

<dependency>

<groupId>org.testgroupId>

<artifactId>B</artifactId>

<version>1.0</version>

<exclusions>

<exclusion>

<groupId>*</groupId>

<artifactId>*</artifactId>

</exclusion>

</exclusions>

</dependency>

Maven精选系列--依赖范围、传递、排除相关推荐

  1. Maven精选系列--继承与聚合

    转载自 Maven精选系列--继承与聚合 继承 什么是继承,我们可以定义项目的父类项目,用于继承父项目的依赖.插件.属性等信息. <parent> <groupId>com.a ...

  2. Maven精选系列--介绍与安装

    转载自 Maven精选系列--介绍与安装 Maven介绍 Maven是一个项目管理工具,用来管理项目的生命周期,如项目中各个项目之间的依赖管理,项目中使用到的jar包依赖管理,还有许多项目构建的插件等 ...

  3. Maven精选系列--标准目录结构

    转载自 Maven精选系列--标准目录结构 Maven的目录结构和传统的项目有所差别,下面是一个jar包通常有的目录结构. src/main/java:源代码目录 src/main/resources ...

  4. Maven精选系列--eclipse各种操作

    转载自 Maven精选系列--eclipse各种操作 在eclipse中配置maven的安装目录,使用最新的maven插件,从安装列表中可以看到eclipse自带绑定的是3.3.9,不是最新的,我们勾 ...

  5. Maven精选系列--POM文件解析

    转载自 Maven精选系列--POM文件解析 之前有介绍到maven的标准目录结构,也看到了maven的核心配置文件pom.xml文件,今天就解析这个配置文件. maven工程的核心文件就是这个pom ...

  6. Maven精选系列--classifier元素妙用

    转载自 Maven精选系列--classifier元素妙用 先来看这么一个依赖 <dependency><groupId>net.sf.json-lib</groupId ...

  7. Maven精选系列--常用命令详情

    转载自 Maven精选系列--常用命令详情 常用命令 mvn –version mvn -v 显示maven安装版本信息 mvn clean 清理项目打包文件,即项目下的target目录 mvn co ...

  8. Maven精选系列--三种仓库详解

    转载自 Maven精选系列--三种仓库详解 仓库分类 1.本地仓库 本地仓库就是开发者本地已经下载下来的或者自己打包所有jar包的依赖仓库,本地仓库路径配置在maven对应的conf/settings ...

  9. Maven精选系列--发布jar包到Nexus私库

    转载自 Maven精选系列--发布jar包到Nexus私库 Nexus2可以通过管理界面来上传jar包到私库中,而最新的Nexus3却找不到了上传界面,只能通过以下方式来发布到私库. 发布第三方jar ...

最新文章

  1. java读取xml文件
  2. 英国推6.5亿英镑网络安全战略 强化安全屏障
  3. python手机版安卓-当python遇到Android手机 那么,万物皆可盘
  4. 静态成员变量的初始化,vector类型变量初始化
  5. Java后端WebSocket的Tomcat实现(转载)
  6. 《Linux内核设计与实现》读书笔记(七)- 中断处理
  7. 在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据
  8. Java后端带参跨域访问_java后端解决请求跨域
  9. C# WPF发票打印
  10. java ee cdi_Java EE CDI限定词:快速浏览
  11. 2020中国淘宝村研究报告
  12. 协程是什么?怎么来的?它有什么作用?
  13. 多语言网站设计需要注意的问题
  14. 如何:从代码创建 UML 类图(ZZ)
  15. 打开Idea,弹出Server‘s certificate is not trusted 解决方法
  16. EasyUI的基本使用布局
  17. php 简明现代魔法,【转】WinCacheGrind配合XDebug分析PHP程序性能 — 简明现代魔法...
  18. java 163邮箱发邮件_java用163邮箱发邮件的方式,步骤有哪些?
  19. AtCoder Beginner Contest 285解题报告
  20. IBM p系列小型机日常维护及故障排除时常用命令(检查IBM设备状态汇总)

热门文章

  1. 蓝桥杯2015初赛-奖券数目-枚举
  2. LightOJ-1220 Mysterious Bacteria (素数打表+欧几里得算法+唯一分解定理)给出x,求x=a^p,最大的指数
  3. 数据结构与索引-- B+树索引
  4. angularjsl路由_AngularJs ng-route路由详解
  5. LeetCode动态规划 使用最小花费爬楼梯
  6. caffe blob操作
  7. Eclipse调试方法
  8. E2. Square-free division (hard version) dp + 质因子分解
  9. P1600 天天爱跑步
  10. Codeforces Round #721 (Div. 2)