Maven 中的 scope(作用域) 用于控制依赖在项目生命周期不同阶段(编译、测试、运行等)的可见性和传递性。它会影响依赖是否被打包、是否参与编译、是否在测试中可用等行为。

Maven 的 scope 有以下几种取值:


1. compile(默认值)

  • 含义:该依赖在项目的所有阶段(编译、测试、运行)都有效。

  • 是否传递:是(会被传递给依赖本项目的其他项目)。

  • 是否打包:是(会被包含在最终的构建产物中,如 JAR/WAR)。

  • 典型用途:核心依赖,如 Spring Core、Log4j 等。

示例:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>5.3.21</version>
  <!-- scope 默认就是 compile,可省略 -->
</dependency>

2. provided

  • 含义:依赖在编译和测试阶段有效,但在运行时由 JDK 或容器提供(如 Servlet API 在 Tomcat 中已存在)。

  • 是否传递:否(不会传递给依赖本项目的其他项目)。

  • 是否打包:否(不会被打入最终的 JAR/WAR)。

  • 典型用途:Servlet API、JSP API、Lombok(编译期注解处理器)等。

示例:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>

3. runtime

  • 含义:依赖不需要参与编译,但在测试和运行时需要

  • 是否传递:是。

  • 是否打包:是。

  • 典型用途:JDBC 驱动(代码只依赖接口,具体实现由运行时提供)、日志实现(如 Logback)。

示例:

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.33</version>
  <scope>runtime</scope>
</dependency>

4. test

  • 含义:依赖仅在测试编译和执行阶段有效(如 JUnit、Mockito)。

  • 是否传递:否。

  • 是否打包:否。

  • 典型用途:单元测试、集成测试框架。

示例:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.13.2</version>
  <scope>test</scope>
</dependency>

5. system

  • 含义:类似于 provided,但依赖必须显式指定本地路径(通过 <systemPath>),不从 Maven 仓库获取

  • 是否传递:否。

  • 是否打包:否。

  • 注意不推荐使用,破坏了构建的可移植性。

示例:

<dependency>
  <groupId>com.example</groupId>
  <artifactId>my-lib</artifactId>
  <version>1.0</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/lib/my-lib.jar</systemPath>
</dependency>

6. import(仅用于 <dependencyManagement>

  • 含义:用于导入另一个 POM 的 <dependencyManagement> 配置,通常在 BOM(Bill of Materials)中使用。

  • 不能用于普通依赖声明,只能在 <type>pom</type> 且位于 <dependencyManagement> 中使用。

  • 典型用途:Spring Boot、Spring Cloud 的版本管理。

示例:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>3.2.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

总结表

表格

Scope

编译

测试

运行

打包

传递

compile

provided

runtime

test

system

import

✅ 表示有效,❌ 表示无效,— 表示不适用。