【 Maven 的依赖范围 】
时间:2019-02-16
本文章向大家介绍【 Maven 的依赖范围 】,主要包括【 Maven 的依赖范围 】使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Maven 的依赖范围(有五种)
在 pom.xml 文件中添加依赖的时候,可以定义 jar包 的依赖范围:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.ys</groupId>
<artifactId>maven-project</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope><!-- 定义以依赖范围 -->
</dependency>
</dependencies>
</project>
1、compile (默认依赖范围)
编译范围,指 A 在编译时依赖 B ,此范围为默认依赖范围。
编译范围的依赖会用在编译、测试、运行、打包
,由于运行时需要,所以编译范围的依赖会被打包。
2、provided
provided 依赖只有在当 JDK 或者 一个容器已经提供该依赖之后才使用。
provided依赖在 编译、测试时需要,在运行、打包时不需要。
例如:servlet api 被 tomcat 容器提供。
3、runtime
runtime 依赖在 编译时不需要,在 测试、运行、打包时需要。
例如:jdbc 驱动包,由于运行时需要,所以 runtime 范围的依赖会被打包。
4、test (作用域在测试环境)
test 范围依赖,在 编译、运行、打包时不需要,测试时需要。
例如:junit ,由于运行时不需要,所以 test范围依赖不会被打包。
5、system
system 范围依赖 与 provided 类似,但必须显式提供一个对于本地系统中 jar 文本的路径,需要指定 systemPath 磁盘路径,system 依赖不推荐使用。
补充:
依赖范围 | 对于编译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仓库之外的类库 |
小结:
- 默认引入 的 jar 包 ------- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )
- servlet-api 、jsp-api ------- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突)
- jdbc 驱动 jar 包 ---- runtime (测试、运行 有效 )
- junit ----- test (测试有效)
依赖范围由强到弱的顺序是:compile>provided>runtime>test
- ThinkPHP导出CSV、Excel
- 使用HttpClient的优解
- 浅谈 EF CORE 迁移和实例化的几种方式
- Python标准库10 多进程初步 (multiprocessing包)
- .NET CORE——Console中使用依赖注入
- EntityFramework Core 自动绑定模型映射
- Python标准库09 当前进程信息 (os包)
- Dapper连接与事务的简单封装
- 数据可视化的秘密
- EntityFramework Core 学习扫盲
- 协议森林03 IP接力赛 (IP, ARP, RIP和BGP协议)
- 从输入url到页面返回到底发生了什么
- 协议森林04 地址耗尽危机 (IPv4与IPv6地址)
- 使用抽象类和接口的优解
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Go语言学习之函数
- 【Spark Operator】webhook的分析
- 图解人脸识别算法facenet系列(一)
- Go 语言学习之 struct
- Go 语言学习之map
- 前端|利用手机号登录获取手机验证码
- Linux netstat命令结果分析
- setlistmap部分源码解析
- 使用 Log4j2 + SLF4j 打造日志系统的全方位教程
- 树莓派4的操作系统安装烧录、设置SSH、WIFI、VNC及备份
- C# dotnet 使用 startIndex 提升 IndexOf 的性能
- vscode .vue文件格式配置 使其与webstorm设置一致
- Go 语言学习之 slice
- koa2实现微信公众号关注自动回复消息
- 两个字数字字符串求和