在 Maven 中,`<scope>` 标签用于定义依赖项的范围,以指定依赖在不同阶段的可见性和生命周期。以下是 Maven 中常见的 `<scope>` 取值类型的详细介绍:
1. **compile**:
- 默认的依赖范围,适用于编译、测试和运行阶段。
- 依赖在项目的所有阶段都是可见的,并且会被打包到最终的产物中。
2. **provided**:
- 适用于编译和测试阶段,但在运行时不会包含在产物中。
- 典型用例是 Java EE 容器提供的 API,如 Servlet API。
3. **runtime**:
- 适用于运行时和测试阶段,但不参与编译。
- 运行时需要这些依赖,但在编译时不需要。
4. **test**:
- 仅在测试阶段可见,不会被打包到最终的产物中。
- 用于编写和运行测试的依赖。
5. **system**:
- 类似于 `provided`,但需要显式提供路径。
- 需要提供依赖的路径,而不是由 Maven 仓库管理。
6. **import**:
- 仅在导入依赖的 POM 中有效,表示依赖由导入的 POM 提供。
- 用于处理 BOM(Bill of Materials)依赖的传递性。
7. **compile-only**:
- 与 `provided` 类似,但不会传递依赖。
- 仅在编译时有效,不会在运行时传递到产物中。
8. **test-compile**:
- 仅在测试编译阶段可用。
- 用于依赖只在测试编译阶段需要的情况。
9. **system-test**:
- 在系统测试阶段可用。
- 通常用于系统测试时需要的依赖。
选择适当的 `<scope>` 取值类型对于正确管理 Maven 项目的依赖关系非常重要。不同的 `<scope>` 值会影响依赖在项目构建过程中的引入和使用方式。