1.什么是依赖范围?

maven 项目不同的阶段引入到classpath中的依赖是不同的,例如,编译时,maven 会将与编译相关的依赖引入classpath中,测试时,maven会将测试相关的的依赖引入到classpath中,运行时,maven会将与运行相关的依赖引入classpath中,而依赖范围就是用来控制依赖于这三种classpath的关系。

2.依赖范围在pom.xml中如何体现?

pom文件如下配置:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.7</version>
   <scope>test</scope>
    </dependency>

其scope标签就是依赖范围的配置,默认是compile,可选配置有test、provided、runtime、system、import

2.有哪些依赖范围?

既<scope>标签的可选配置:compile、test、provided、runtime、system、import,下面一一介绍

1)编译依赖范围(compile),该范围就是默认依赖范围,此依赖范围对 于编译、测试、运行三种classpath都有效,举个简单的例子,假如项目中有spring-core的依赖,那么spring-core不管是在编译,测试,还是运行都会被用到,因此spring-core必须是编译范围(构件默认的是编译范围,所以依赖范围是编译范围的无须显示指定)

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-core</artifactId>
     <version>2.5</version>
     <scope>compile</scope> <!--默认为该依赖范围,无须显示指定--〉
    </dependency>

2)测试依赖范围(test),顾名思义就是针对于测试的,使用此依赖范围的依赖,只对测试classpath有效,在编译主代码和项目运行时,都将无法使用该依赖,最典型的例子就是 Junit, 构件在测试时才需要,所以它的依赖范围是测试,因此它的依赖范围需要显示指定为<scope>test</scope> ,当然不显示指定依赖范围也不会报错,但是该依赖会被加入到编译和运行的classpath中,造成不必要的浪费 。

<dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.7</version>
    <scope>test</scope>
    </dependency>

3)已提供依赖范围(provided),使用该依赖范围的maven依赖,只对编译和测试的classpath有效,对运行的classpath无效,典型的例子就是servlet-api, 编译和测试该项目的时候需要该依赖,但是在运行时,web容器已经提供的该依赖,所以运行时就不再需要此依赖,如果不显示指定该依赖范围,并且容器依赖的版本和maven依赖的版本不一致的话,可能会引起版本冲突,造成不良影响。

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

4)运行时依赖范围(runtime),使用该依赖范围的maven依赖,只对测试和运行的classpath有效,对编译的classpath无效,典型例子就是JDBC的驱动实现,项目主代码编译的时候只需要JDK提供的JDBC接口,只有在测试和运行的时候才需要实现上述接口的具体JDBC驱动。

5),系统依赖范围(system),该依赖与classpath的关系与 provided依赖范围完全一致,但是系统依赖范围必须通过配置systemPath元素来显示指定依赖文件的路径,此类依赖不是由maven仓库解析的,而且往往与本机系统绑定,可能造成构件的不可移植,因此谨慎使用,systemPath元素可以引用环境变量:

<dependency>
    <groupId>javax.sql</groupId>
    <artifactId>jdbc-stext</artifactId>
    <version>2.0</version>
    <scope>system</scope>
    <systemPath>${java.home}/lib/rt.jar</systemPath> 
    </dependency>

6)导入依赖范围(import),该依赖范围不会对三种classpath产生影响,该依赖范围只能与dependencyManagement元素配合使用,其功能为将目标pom文件中dependencyManagement的配置导入合并到当前pom的dependencyManagement中。有关dependencyManagement的功能请了解maven继承特性。

Maven 依赖范围相关推荐

  1. 又出现依赖冲突?试试 IDEA 解决 Maven 依赖冲突的高能神器!

    以下文章来源方志朋的博客,回复"666"获面试宝典 1.何为依赖冲突 Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的.Maven的依赖机制会导致Jar包的冲突.举个 ...

  2. 是时候装逼了,试试 IDEA 解决 Maven 依赖冲突的高能神器!

    点击关注公众号,Java干货及时送达 来源 | segmentfault.com/a/1190000017542396 1.何为依赖冲突 Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的 ...

  3. 解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:桔子214032 segmentfault.com/ ...

  4. 解决 Maven 依赖冲突的好帮手,必须了解一下!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:桔子214032 sf.com/a/119000001754 ...

  5. 碰到Maven依赖冲突,想砸电脑?这个IDEA插件必须了解一下...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:https://urlify.cn/mAj6Nj # 何为依 ...

  6. 漫画谈一下Maven依赖,百分之90的同学不知道!

    Maven 依赖排除(Exclusions) 因为 Maven 构建的项目具有依赖可传递的特性,当你在 pom.xml添加某个依赖时,可能也会引入不需要的依赖到你的项目中,这将会会可能引起如下问题: ...

  7. [笔记]解决m2eclipse给项目添加maven依赖管理时可能不给项目的build path...

    为什么80%的码农都做不了架构师?>>>    解决办法:在m2eclipse提供的菜单里关闭项目的Maven依赖管理,然后再启动Maven的依赖管理!!! 检查:1)查看项目的.c ...

  8. maven排除依赖包的子依赖_漫画谈一下Maven依赖

    Maven 依赖排除(Exclusions) 因为 Maven 构建的项目具有依赖可传递的特性,当你在 pom.xml添加某个依赖时,可能也会引入不需要的依赖到你的项目中,这将会会可能引起如下问题: ...

  9. 我爱Java系列---【 maven依赖版本冲突的解决方法】

    我爱Java系列---[ maven依赖版本冲突的解决方法] 参考文章: (1)我爱Java系列---[ maven依赖版本冲突的解决方法] (2)https://www.cnblogs.com/hu ...

  10. 解决IDEA中导入新的maven依赖后Language Level自动重置问题

    解决IDEA中导入新的maven依赖后Language Level自动重置问题 参考文章: (1)解决IDEA中导入新的maven依赖后Language Level自动重置问题 (2)https:// ...

最新文章

  1. matlab做交互作用图,MatlabMatlab工程应用案例精要.ppt
  2. Java多线程之CAS缺点
  3. Python报表自动化
  4. java虚拟机的内存模型_JVM(Java虚拟机)内存模型(转载/整理)
  5. win10一键重装系统​
  6. python xlwings api_2021-01-13python,xlwings,api运用,及一些问题
  7. 富士通大数据架构解决方案闪耀存储峰会
  8. C# 网络爬虫 抓取“北京标准时间“ 网页请求
  9. 【gitee】解决gitee本地提交但是无法显示贡献度(绿点)的问题
  10. UART使用EDMA收发
  11. Swarm-bzz/Ipfs-fil的去中心化存储到底是什么?
  12. 2B市场行业,面向2025年技术趋势与5大机会,赶快来看一看吧
  13. turtle之绘制美国队长的盾牌
  14. 极兔快递单号查询API
  15. 常用的激活函数sigmoid,relu,tanh
  16. [BZOJ]1064 [NOI2008] 假面舞会 dfs判环
  17. 手机腾讯网前端框架MT2.1.0发布
  18. 帝国CMS7.5微信扫码登录插件 帝国cms插件分享
  19. iStat Menus mac中文
  20. ElGamal算法实现

热门文章

  1. 什么是A013最近北上资金大额增仓选股指标?
  2. jumpserver详解(七)——jumpserver初始化设置
  3. 《移动软件开发》实验3:视频播放小程序
  4. 美与科技融合 中国移动发布全新5G手机NZONE 50 Pro
  5. 怎么增加服务器,服务器如何增加内存?
  6. 苹果官宣3月9日举行春季发布会 iPhone SE最受期待
  7. USB原理之一连接建立(四)2022-02-13
  8. 微信小程序分享图片给微信好友
  9. 从本地数据库查询全国省市县信息
  10. 51book机票总结