Maven 之 scope 依赖范围
一、理解 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 驱动。
import : scope=import , type=pom 表 示 在 此 pom 中 引 入 spring-boot-
dependencies 的 pom 的所有内容,注意只能在 dependencyManagement 中使用。
system:系统依赖范围。该依赖与三种 classpath 的关系,和 provided 依赖范围完
全一致。只是,使用 system 范围依赖时,需要指定 systemPath 元素显示地指定
依赖文件的路径。由于此依赖不是 Maven 仓库解析的,而且往往与本机系统绑定,
可能造成构建的不可遗址,因此不建议使用。systemPath 元素可以引用环境变量,
如:
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
评论0
最新资源