前言
我的项目中 jar 包的加载个别有这么几个阶段:编译、测试、运行,理论我的项目构建过程中 jar 包应该可能满足不同的阶段有选择性地加载应用的需要,Maven 通过 scope 配置来满足这个需要。
分类
compile(默认)
在编译、测试和运行时都要应用该依赖 jar 包。
provided
编译和测试无效,运行有效。如 servlet-api,在我的项目运行时,tomcat 等容器曾经提供,无需 Maven 反复引入。
runtime
测试和运行无效,编译有效。如 jdbc 驱动实现,编译时只需接口,测试或运行时才须要具体的 jdbc 驱动实现。
test
只对测试无效,表明只在测试的时候须要,在编译和运行时将无奈应用该类依赖 jar 包,如 junit。
system
被依赖 jar 不会从 maven 仓库中查找,而是从本地零碎中获取,须要和 systemPath 元素一起应用,用于指定本地零碎中 jar 文件的门路。
import
只在 <dependencyManagement> 中应用,示意从其它的 pom 中导入 dependency 的配置,这样能够简化配置导入的复杂度,同时实现 jar 包版本的对立治理等。上面常常遇到的应用 import 的一个实例:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>