maven范围compile与provided何时将工件构建为JAR 之间有什么区别?如果它是WAR,我明白 - 工件将包含在WEB-INF/lib中或不包含在WEB-INF/lib中.但是在JAR的情况下它并不重要 - 不包括依赖性.当它们的范围是compile或时,它们必须在类路径上provided.我知道provided依赖关系不是传递性的 - 但它只是一个区别吗?
Jac*_*cob 277
来自Maven Doc:
编
这是默认范围,如果未指定,则使用此范围.编译依赖项在项目的所有类路径中都可用.此外,这些依赖项将传播到依赖项目.
提供
这很像compile,但表示您希望JDK或容器在运行时提供依赖性.例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类.此范围仅在编译和测试类路径中可用,并且不可传递.
概括:
Owe*_*Cao 276
编译意味着您需要JAR来编译和运行应用程序.对于Web应用程序,作为示例,JAR将放在WEB-INF/lib目录中.
提供意味着您需要JAR进行编译,但在运行时,环境已经提供了JAR,因此您不需要将其与应用程序打包在一起.对于Web应用程序,这意味着JAR文件不会放入WEB-INF/lib目录中.
对于Web应用程序,如果应用程序服务器已提供JAR(或其功能),则使用"已提供",否则使用"编译".
小智 20
以下是所有支持的依赖项的简介(源maven doc)
这是默认范围,如果未指定,则使用此范围.编译依赖项在项目的所有类路径中都可用.此外,这些依赖项将传播到依赖项目.
这很像compile,但表示您希望JDK或容器在运行时提供依赖性.例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类.此范围仅在编译和测试类路径中可用,并且不可传递.
此范围表示编译不需要依赖项,但是用于执行.它位于运行时和测试类路径中,但不是编译类路径.
此范围表示正常使用应用程序不需要依赖关系,并且仅可用于测试编译和执行阶段.此范围不具有传递性.
此范围与提供的类似,只是您必须提供明确包含它的JAR.工件始终可用,并且不会在存储库中查找.
此范围仅在该部分中类型为pom的依赖项上受支持.它指示要使用指定POM部分中的有效依赖项列表替换的依赖项.由于它们被替换,具有导入范围的依赖性实际上不参与限制依赖性的传递性.
jfc*_*edo 16
如果您计划生成包含其所有依赖项的单个JAR文件(典型的xxxx-all.jar),则提供的范围很重要,因为此范围内的类不会是生成的JAR中的包.
有关更多信息,请参阅maven-assembly-plugin
小智 9
- 编
在类路径中可用,如果是普通jar,请不要将此依赖项添加到最终jar中; 但如果最后一个jar是一个jar(例如,可执行jar),请将此jar添加到jar中
- 提供
依赖关系将在运行时环境中可用,因此在任何情况下都不要添加此依赖关系; 甚至不在单罐(即可执行的jar等)
| 归档时间: |
|
| 查看次数: |
239965 次 |
| 最近记录: |