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