Maven 的依赖范围
2024-09-07 19:15:48
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 实战》
最新文章
- OpenNURBS to OpenCASCADE
- bzoj4364: [IOI2014]wall砖墙
- 关于CORS
- 机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
- UITableView使用过程中可能遇到的问题
- async/await 执行顺序详解
- pipeline(管道)设计模式
- UNIX环境高级编程——system V消息队列
- 【html】使用img标签和背景图片之间的区别
- python3 多线程爆破ftp、mysql、ssh
- Yii2的save()方法容易出错的地方
- Spring MVC基础知识整理➣Spring+SpringMVC+Hibernate整合操作数据库
- pip软件包安装 + Anaconda软件库安装 教程
- ubuntu root 密码是随机的! root权限下设置共享文件夹
- repo总结【转】
- QSS样式表之PS黑色风格+白色风格+淡蓝色风格(开源)
- css 文本和div垂直居中方法汇总
- Change - Why we need coding standards
- wpf数据绑定的论述
- css英文长文字会自动换行的解决办法
热门文章
- [golang]Golang实现高并发的调度模型---MPG模式
- React中兄弟组件传值
- 剑指offer:和为S的连续正数序列
- ZooKeeper和ZAB协议
- 支付宝即时到账交易接口C#接入方式的几个坑
- typescript - 4.es5与typescript的类与继承
- [转]c++ 开发 sqlite
- (转)matplotlib实战
- Cannot start service WMSvc on computer &#39;.&#39;.
- httpcomponent框架MultipartEntityBuilder addTextBody中文乱码