Maven 在编译项目主代码的时候需要使用一套 classpath,在编译和执行测试的时候会使用另外一套 classpath。最后,实际运行 Maven 项目的时候,又会使用一套 classpath。依赖范围就是用来控制依赖与这三种 classpath 的关系的。

如,下面示例,junit 的依赖范围就是 test。

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

Maven 公有以下几种依赖范围:

  • compile: 编译依赖范围,如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven 依赖,对于编译,测试和运行三种 classpath 都有效。

  • test: 测试依赖范围。使用此依赖范围的 Maven 依赖,只对于 测试 classpath 有效,在编译主代码或者运行项目使用时将无法使用此依赖。典型的例子就是 Junit。

  • provided: 已提供依赖范围。使用此依赖范围的 Maven 依赖,对于编译和测试 classpath 有效,但在运行项目的时候无效。典型的例子就是 servlet-api,编译和测试项目时候,需要该依赖,但是在运行项目时,由于容器已经提供,就不需要 maven 重复的引入一遍。

            <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
    </dependency>
  • runtime: 运行时依赖范围。使用此依赖的 Maven 依赖,对于测试和运行的 classpath 有效,但在编译主代码时无效。典型的例子就是 JDBC 驱动实现。项目主代码的编译只需要 JDK 提供的 JDBC 接口,只有在执行测试或者运行项目时才需要实现上述接口的具体 JDBC 驱动。

除了以上 4 种类型外,还有 import 和 system, 不常用,此处暂不介绍。

参考资料:《Maven 实战》

最新文章

  1. OpenNURBS to OpenCASCADE
  2. bzoj4364: [IOI2014]wall砖墙
  3. 关于CORS
  4. 机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
  5. UITableView使用过程中可能遇到的问题
  6. async/await 执行顺序详解
  7. pipeline(管道)设计模式
  8. UNIX环境高级编程——system V消息队列
  9. 【html】使用img标签和背景图片之间的区别
  10. python3 多线程爆破ftp、mysql、ssh
  11. Yii2的save()方法容易出错的地方
  12. Spring MVC基础知识整理➣Spring+SpringMVC+Hibernate整合操作数据库
  13. pip软件包安装 + Anaconda软件库安装 教程
  14. ubuntu root 密码是随机的! root权限下设置共享文件夹
  15. repo总结【转】
  16. QSS样式表之PS黑色风格+白色风格+淡蓝色风格(开源)
  17. css 文本和div垂直居中方法汇总
  18. Change - Why we need coding standards
  19. wpf数据绑定的论述
  20. css英文长文字会自动换行的解决办法

热门文章

  1. [golang]Golang实现高并发的调度模型---MPG模式
  2. React中兄弟组件传值
  3. 剑指offer:和为S的连续正数序列
  4. ZooKeeper和ZAB协议
  5. 支付宝即时到账交易接口C#接入方式的几个坑
  6. typescript - 4.es5与typescript的类与继承
  7. [转]c++ 开发 sqlite
  8. (转)matplotlib实战
  9. Cannot start service WMSvc on computer &#39;.&#39;.
  10. httpcomponent框架MultipartEntityBuilder addTextBody中文乱码