小编典典

maven 范围编译和提供给 JAR 打包的区别

all

compilemaven 范围和provided将工件构建为 JAR之间有什么区别?如果是 WAR,我会理解 - 工件将包含或不包含在 WEB-
INF/lib 中。但在 JAR
的情况下,这并不重要——不包括依赖项。compile当它们的作用域为或时,它们必须在类路径上provided。我知道provided依赖关系不是传递性的——但它只是一个区别吗?


阅读 96

收藏
2022-04-21

共1个答案

小编典典

来自Maven 文档

  • 编译

这是默认范围,如果未指定则使用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖关系会传播到依赖项目。

  • 假如

这很像 compile,但表明您希望 JDK 或容器在运行时提供依赖项。例如,在为 Java Enterprise Edition 构建 Web
应用程序时,您可以将 Servlet API 和相关 Java EE API 的依赖设置为提供的范围,因为 Web
容器提供了这些类。此范围仅在编译和测试类路径上可用,并且不可传递。

回顾:

  • 依赖项是不传递的(正如你提到的)
  • 提供的范围仅在编译和测试类路径中可用,而编译范围在所有类路径中都可用。
  • 提供的依赖项未打包
2022-04-21