小编典典

Maven范围编译与提供给JAR打包之间的区别

python

Maven范围compileprovided将工件构建为JAR时有什么区别?如果是WAR,我会理解-该工件将包含在WEB-INF / lib中或不包含在其中。但如果是JAR,则没关系-不包括依赖项。当范围为compile或时,它们必须位于类路径上provided。我知道provided依赖项不是可传递的-但这仅仅是一个区别吗?


阅读 254

收藏
2021-01-20

共1个答案

小编典典

从Maven文档:

编译

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

提供

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

回顾:

  • 依赖项不是可传递的(如您所述)
  • 提供的范围仅在编译和测试类路径上可用,而编译范围在所有类路径上可用。
  • 提供的依赖项未打包
2021-01-20