一、理解Maven scope依赖范围的作用

Maven在编译项目主代码的时候需要使用一套classspath。总共有三种classpath,分别对应于Maven编译项目主代码的时候、Maven编译和执行测试的时候、实际运行Maven项目的时候。

  • Compile: 编泽依赖范围.如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。比如spring-core依赖,在编辑、测试、运行的时候都需要使用该依赖。

test: 测试依赖范围。使用此依赖范围的Maven依赖,只对测试的classpath有效,在编译主代码或者运行项目时无法使用此类依赖。比如JUnit的依赖,它只有在编译测试代码及运行测试的时候需要

  • provided:以提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试的classpath有效,但在运行时无效。比如servlet-api,编译和测试项目的时候需要用到该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复的引入一遍。
  • runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。比如JDBC驱动的实现,项目主代码编译的时候,只需要JDK提供的JDBC接口就可以,但是在执行测试或者运行项目的时候才需要实现实现JDBC接口的具体JDBC驱动。
  • system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。只是,使用system范围依赖时,需要指定systemPath元素显示地指定依赖文件的路径。由于此依赖不是Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可遗址,因此不建议使用。systemPath元素可以引用环境变量,如:

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

二、依赖范围与classpath的关系

依赖范围(scope) 对于编译classpath有效 对于测试classpath有效 对于运行时classpath有效 例子
compile Y Y Y spring-core
test - Y - JUnit
provided Y Y - servlet-api
runtime - Y Y JDBC驱动实现
system Y Y - 本地的,Maven仓库之外的类库文件

最新文章

  1. CRL开发框架发布2.2版
  2. CSS实现弹出导航菜单
  3. swift语言特性
  4. 【python】解压文件
  5. JSch - Java实现的SFTP(文件下载详解篇)
  6. USB port 如何识别不同的Charger类型
  7. [初读笔记] Cloud Migration Research: A Systematic Review (TCC, 2013)
  8. Indoor Positioning System &amp; Real time location system
  9. (转)mongodb常用命令脚本化-自动化运维
  10. 小巧、高效、美观的弹出日历组件 ——lhgcalendar
  11. 检测CPU是否支持虚拟化
  12. hdu4414(DFS 找十字架数量)
  13. jQuery的$.ajax方法响应数据类型有哪几种?本质上原生ajax响应数据格式有哪几种,分别对应哪个属性?
  14. MQ队列与哪些机器连接
  15. NOSQL -- Mongodb的简单操作与使用(win10)
  16. [翻译]C# BAD PRACTICES: Learn how to make a good code by bad example---C#:如何将坏的代码重新编译为好的代码
  17. linux 下 git gem 等代理设置问题
  18. SQL语句01
  19. 2、Android-UI(常用控件)
  20. 【前端】CSS3的calc()使用

热门文章

  1. Educational Round 64 题解
  2. 获取当前页面url指定参数值
  3. React 获取真实Dom v8.6.2版本
  4. springboot2.x自定义拦截把static静态文件给拦截的坑
  5. SQL Server -----创建sqlserver 数据库 、表
  6. 【转帖】Storm基本原理概念及基本使用
  7. [转帖]ORACLE 12C连接时报ORA28040和ORA01017的错误
  8. 观察者(Observer)模式
  9. react项目添加本地音频
  10. CRLF will be replaced by LF in XXX when git commit