3 回答
TA贡献1900条经验 获得超5个赞
编译
这是默认范围,如果没有指定,则使用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖项被传播到依赖项目。
提供
这与编译非常相似,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为JavaEnterpriseEdition构建Web应用程序时,您将对ServletAPI和相关JavaEEAPI的依赖设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径上可用,而不是传递性的。
概述:
- 依赖关系不是传递性的(正如您所提到的)
- 提供的作用域仅在编译和测试类路径上可用,而在所有类路径中都有编译作用域。
- 如果没有打包依赖项
TA贡献1725条经验 获得超7个赞
编译意味着您需要JAR来编译和运行应用程序。例如,对于Web应用程序,JAR将放置在Web-INF/lib目录中。
提供意味着您需要JAR进行编译,但是在运行时环境已经提供了一个JAR,所以您不需要将其打包到应用程序中。对于Web应用程序,这意味着JAR文件不会被放置到Web-INF/lib目录中。
对于Web应用程序,如果应用服务器已经提供了JAR(或其功能),那么就使用“Providing”,否则使用“编译”。
TA贡献1809条经验 获得超8个赞
编译
这是默认范围,如果没有指定,则使用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖项被传播到依赖项目。
提供
这与编译非常相似,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为JavaEnterpriseEdition构建Web应用程序时,您将对ServletAPI和相关JavaEEAPI的依赖设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径上可用,而不是传递性的。
运行时
此范围表示编译时不需要依赖项,而是用于执行的依赖项。它位于运行时和测试类路径中,而不是编译类路径中。
试验
此范围表示正常使用应用程序不需要依赖项,并且仅在测试编译和执行阶段可用。此范围不是传递性的。
系统
这个范围与提供的类似,只是您必须提供包含它的JAR。工件总是可用的,不在存储库中查找。
导入(仅在Maven 2.0.9或更高版本中可用)
此作用域仅支持部分中pom类型的依赖项。它指示要替换为指定POM部分中的依赖项的有效列表的依赖项。由于它们被替换,具有导入范围的依赖关系实际上并不参与限制依赖项的传递性。
添加回答
举报