Scope 指定了依赖的作用范围
依赖关系范围用于限制依赖关系的传递性,并影响用于各种生成任务的类路径。
可用作用域有6个:
- compile
这是默认范围,如果未指定,则使用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖关系将传播到依赖项目。 - provided
它很像compile,但表示您希望JDK或容器在运行时提供依赖项。例如,当为Java企业版构建Web应用程序时,您会将servlet API和相关的JavaEE API的依赖项设置为提供的作用域,因为Web容器提供了这些类。此范围仅在编译和测试类路径上可用,不可传递。 - runtime
此范围指示编译不需要依赖项,而是要执行依赖项。它在运行时和测试类路径中,但不在编译类路径中。 - test
此范围表示依赖关系对于应用程序的正常使用不是必需的,并且仅对测试编译和执行阶段可用。此范围不可传递。 - system
这个范围与提供的范围类似,只是您必须提供显式包含它的JAR。工件总是可用的,并且不会在存储库中查找。 - import
只有在<dependencyManagement>部分中的pom类型依赖项才支持此范围。它指示要替换为指定POM的<DependencyManagement>部分中的有效依赖项列表的依赖项。由于它们被替换,具有导入范围的依赖项实际上不参与限制依赖项的传递性。
每个作用域(导入除外)以不同的方式影响可传递依赖项,如下表所示。如果将依赖项设置为左列中的作用域,则该依赖项与顶行作用域之间的可传递依赖项将导致主项目中的依赖项与交叉点处列出的作用域之间存在依赖关系。如果没有列出范围,则表示将忽略依赖项。
compile | provided | runtime | test | |
compile | compile(*) | - | runtime | - |
provided | provided | - | provided | - |
runtime | runtime | - | runtime | - |
test | test | - | test | - |
(*)注意:这应该是运行时范围,因此必须显式列出所有编译依赖项。但是,如果您所依赖的库从另一个库扩展了一个类,那么这两个库都必须在编译时可用。因此,即使编译时依赖项是可传递的,它们仍然是编译范围。
参考资料
http:///guides/introduction/introduction-to-dependency-mechanism.html
















