一、依赖管理

1.1、依赖声明

dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency>

1.2、依赖管理原理

1.3、依赖范围

依赖范围scope 主代码classpath有效性 测试代码classpath有效性 运行时classpath有效性 例子
compile Y Y Y log4j
test - Y - junit
provided Y Y - servlet-api
runtime - - Y jdbc driver
  1. compile:编译范围,默认scope,在工程环境的classpath(编译环境)和打包(如果是war包,会包含在war包中)时候都有效
  2. provided:表示该jar包已由容器(tomcat)或jdk,只在编译的classpath中使用,打包时不包含在目标包中。常见的:servlet-api和jsp-api等由目标容器提供,无需打包到war包中。如果不配置为provided,在tomcat6+会出现包冲突。
  3. runtime:一般是运行和测试环境使用,编译时不加入classpath,打包时会打包到目标包中。一般是通过动态加载或反射加载。也就是说程序只使用了接口,具体的时候可能有多个,运行时通过配置文件或jar包扫描动态加载的情况。典型的包括:JDBC驱动等
  4. test:单元测试场景使用,编译时加入classpath,打包时不加入。如:junit

二、依赖传递

2.1、直接依赖和间接依赖

如果B中使用A,C中使用B,那么B是C的直接依赖,A是C的间接依赖。

2.2、依赖范围对传递依赖的影响

  • (1) 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
  • (2) 当第二直接依赖的范围是test的时候,依赖不会得以传递。
  • (3) 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依
  • 赖的范围同样为 provided;
  • (4) 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但
  • compile例外,此时传递的依赖范围为runtime;

2.3、依赖冲突

  1. 如果直接依赖与间接依赖包含同一坐标不同版本的依赖资源,以直接依赖的版本为准(就近原则)
  2. 如果直接依赖中包含同一坐标的不同版本,以配置顺序下方的版本为准(就近原则)

2.4、可选依赖

optional:true、false用于设置是否可选,也可以理解为jar包是否向下传递。

true,不传递;false,传递;默认为false

2.5、排除依赖

在直接依赖的配置里面添加 exclusions→exclusion 元素,指定要排除依赖的 groupId 和 artifactId,不需要添加版本号

    <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope><exclusions><exclusion><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId></exclusion></exclusions></dependency>

Maven(六)Maven传递性和依赖性相关推荐

  1. 面试必会系列 - 11.1 一文读懂Maven:Maven工程类型、项目结构、工程关系、常见命令等

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  2. Maven学习——maven基础

    maven基础 前言 一.maven简介 mave的功能: 二.下载和安装 三.maven的基础概念 1.仓库 2.坐标 3.本地仓库配置 四.制作Maven项目 纯手工制作 插件制作 IDEA制作 ...

  3. Maven:Maven 入门

    背景 几乎所有的主流平台都提供了依赖管理工具,如:.Net 的 Nuget.Ruby 的 Gem.Node 的 Npm等,今天简单的解释一下如何使用 Maven,以及最常见的问题. 下载 Maven ...

  4. 【Maven】maven 插件开发实战

    [Maven]maven 插件开发实战 附上我历时三个月总结的 Java 面试 + Java 后端技术学习指南,这是本人这几年及春招的总结,目前,已经拿到了大厂offer,拿去不谢! 下载方式 1.  ...

  5. eclipse配置maven + 创建maven项目

    准备工作 在eclipse配置maven之前需要我们做好准备工作,如下: 1. 安装jdk 2. 已安装好 maven,将maven配置成功 3. 下载Eclipse,解压缩安装完成,建立工作空间. ...

  6. maven 学习---Maven添加远程仓库

    默认情况下,Maven从Maven中央仓库下载所有依赖关系.但是,有些库丢失在中央存储库,只有在Java.net或JBoss的储存库远程仓库中能找到. 1. Java.net资源库 添加Java.ne ...

  7. idea maven创建java项目_新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目(图文教程)...

    之前都没试过用maven来管理过项目,但是手动找包导包确实不方便,于是今天用2016版的IDEA进行了maven的初尝试. 打开IDEA,创建新项目: 然后选择Maven,以及选择自己电脑的jdk: ...

  8. 【maven】maven的介绍

    一.Maven简介 Maven是一个跨平台的项目管理工具.作为Apache组织的一个颇为成功的开源项目,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理.maven是Apache的顶级项 ...

  9. maven安装 maven上传jar包到库里面

    maven的安装与配置:http://pansanday.blog.163.com/blog/static/381662802012727103454743/ maven上传jar包到库里面: 将私有 ...

  10. Eclipse中导入maven项目 maven update project报“Cannot nest ‘xx/src/main/resources‘ inside ‘xx/src ……”

    导入maven项目 maven update project"Cannot nest 'xx/src/main/resources' inside 'xx/src --" Unab ...

最新文章

  1. debian10 Unable to correct problems, you have held broken packages.
  2. Freemarker入门小案例(生成静态网页的其中一种方式)
  3. .NET Core扩展IServiceCollection自动注册服务
  4. 《四世同堂》金句摘抄(十五)
  5. 支付宝一键清除首页各种广告
  6. c语言甘勇第二版第五章答案,C语言(1) - Patata的个人页面 - OSCHINA - 中文开源技术交流社区...
  7. html页面代码重用-document writeln
  8. resolv文件自动配置
  9. 【初赛】排列组合的一点笔记
  10. ros 机械臂复位_ROS入门学习之八机器人综合应用
  11. java中ping多个ip_在Java中ping多个服务器
  12. 映美精LoadDeviceStateFromFile问题
  13. 1024技术论坛 | C#与.NET技术新发展
  14. C++ 入门基础 取余数的应用价值
  15. 【Python配置】使用pyenv与virtualenv搭建单机多版本python多虚拟环境开发
  16. java多项式加法与乘法_java多项式加减法
  17. Java实现百万并发(整理)
  18. Unity记录3.1-地图-TileMap简单使用、鼠标拖动放置Tile
  19. 把握消费节点,精细服务助推喆啡酒店创优
  20. python学习dya4

热门文章

  1. 皮尔森相关系数的python实现_深入理解皮尔逊相关系数python代码
  2. C语言:memcmp()。
  3. python修改图片大小为30kb_python 批量修改图片大小
  4. 解决win10桌面管理器内存泄漏问题
  5. P4118 [Ynoi2016]炸脖龙I
  6. 基础 八大疑问词+翻译
  7. js怎么识别图片中的文字,js图片文字识别代码
  8. bufferedimage 保存图片_如何提取图片中的文字
  9. 网页上文件的上传和下载
  10. python绘制每日的时序图_GitHub - wavous/Python-100-Days: Python - 100天从新手到大师