Maven 依赖包的Scope属性设置

  整理下Maven依赖包作用范围Scope属性值,默认值是compile

Scope四个属性值

依赖项中的Scope元素用于引用当前任务的类路径(编译和运行时,测试等)以及如何限制依赖项的传递性。

有五个范围可用

  • compile - 这是默认范围,如果未指定则使用。所有类路径中都提供了编译依赖项。此外,这些依赖项将传播到依赖项目。
  • provided - 这很像编译,但表示您希望JDK或容器在运行时提供它。它仅在编译和测试类路径中可用,并且不可传递。
  • runtime - 此范围指示编译不需要依赖项,但是用于执行。它位于运行时和测试类路径中,但不是编译类路径。
  • test - 此范围表示正常使用应用程序不需要依赖关系,并且仅适用于测试编译和执行阶段。它不是传递性的。
  • system - 此范围与提供的类似,只是您必须提供明确包含它的JAR。工件始终可用,不会在存储库中查找。
  1. compile
    默认值,对编译范围有效(所有范围),在编译和打包时都会将依赖打包进去。
  2. provided
    在编译和测试的过程有效,最后打成 war 包时不会加入,认为目标容器已提供该jar包。如:servlet-api
  3. runtime
    在运行的时候依赖,在编译的时候不依赖。
  4. test
    在测试时使用,在编译和打包时都不会加入这个依赖,如:junit

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
作者

光星

发布于

2018-01-11

更新于

2022-06-16

许可协议

评论