Maven范围compile与provided将工件构建为JAR时有什么区别?如果是WAR,我会理解-该工件将包含在WEB-INF / lib中或不包含在其中。但如果是JAR,则没关系-不包括依赖项。当范围为compile或时,它们必须位于类路径上provided。我知道provided依赖项不是可传递的-但这仅仅是一个区别吗?
compile
provided
从Maven文档:
编译 这是默认范围,如果未指定则使用。编译依赖项在项目的所有类路径中均可用。此外,这些依赖项会传播到相关项目。 提供 这很像编译,但是表明您希望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise Edition构建Web应用程序时,您将对Servlet API和相关Java EE API的依赖关系设置为所提供的范围,因为Web容器提供了这些类。该作用域仅在编译和测试类路径上可用,并且不可传递。
编译
这是默认范围,如果未指定则使用。编译依赖项在项目的所有类路径中均可用。此外,这些依赖项会传播到相关项目。
提供
这很像编译,但是表明您希望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise Edition构建Web应用程序时,您将对Servlet API和相关Java EE API的依赖关系设置为所提供的范围,因为Web容器提供了这些类。该作用域仅在编译和测试类路径上可用,并且不可传递。
回顾: