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仓库之外的类库 |