根据官方文档Dependency scope
依赖范围的作用: 用于限制依赖关系的可传递性,并且还影响用于各种构建任务的类路径。
共有6种依赖范围:
-
compile : 这是
默认
范围,如果未指定则使用。编译依赖项在项目的所有类路径中均可用。此外,这些依赖项会传播到相关项目。 -
provided: 这很像
compile
,但是表明您希望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise Edition构建Web应用程序时,您将对Servlet API和相关Java EE API的依赖关系设置为peovided
的范围,因为Web容器提供了这些类。该作用域仅在编译和测试类路径上可用,并且不可传递。 -
runtime : 此作用域表明依赖关系不是编译所必需的,而是执行所必需的。它在运行时和测试类路径中,但不在编译类路径中。
-
test : 此范围表明该依赖关系对于正常使用该应用程序不是必需的,并且仅在测试编译和执行阶段可用。此范围不是可传递的。
-
system: 该范围类似于
provied
范围,除了必须提供显式包含它的JAR。该工件始终可用,并且不会在存储库中查找。 -
import: 此范围仅受<dependencyManagement>部分中pom类型的依赖项支持。它在指定的POM的<dependencyManagement>部分中指示要用有效的依赖关系列表替换的依赖关系。由于已替换它们,因此具有导入范围的依赖项实际上并不参与限制依赖项的可传递性。
如下表所示,每个作用域(导入除外)以不同的方式影响传递依赖关系。如果将依赖项设置为左列中的范围,则该依赖项的可传递依赖项与顶部行中的范围将导致在主项目中具有相交处列出的范围的依赖项。如果未列出作用域,则表示将忽略依赖项。
compile | provided | runtime | test | |
---|---|---|---|---|
compile | compile(*) | - | runtime | - |
provided | provided | - | provided | - |
runtime | runtime | - | runtime | - |
test | test | - | test | - |
后续参考文档,见官网
网友评论