为了账号安全,请及时绑定邮箱和手机立即绑定

用于JAR打包的maven作用域编译和提供的区别

用于JAR打包的maven作用域编译和提供的区别

小唯快跑啊 2019-07-15 09:41:56
用于JAR打包的maven作用域编译和提供的区别maven作用域之间的区别是什么?compile和provided当神器被做成罐子的时候?如果这是战争,我会理解-工件将包括或不包括在Web-INF/lib中。但是在JAR的情况下,这并不重要-不包括依赖关系。当它们的作用域是compile或provided..我知道provided依赖不是传递性的,但这仅仅是一个区别吗?
查看完整描述

3 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

编译

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

提供

这与编译非常相似,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为JavaEnterpriseEdition构建Web应用程序时,您将对ServletAPI和相关JavaEEAPI的依赖设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径上可用,而不是传递性的。

概述:

  • 依赖关系不是传递性的(正如您所提到的)
  • 提供的作用域仅在编译和测试类路径上可用,而在所有类路径中都有编译作用域。
  • 如果没有打包依赖项


查看完整回答
反对 回复 2019-07-15
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

编译意味着您需要JAR来编译和运行应用程序。例如,对于Web应用程序,JAR将放置在Web-INF/lib目录中。

提供意味着您需要JAR进行编译,但是在运行时环境已经提供了一个JAR,所以您不需要将其打包到应用程序中。对于Web应用程序,这意味着JAR文件不会被放置到Web-INF/lib目录中。

对于Web应用程序,如果应用服务器已经提供了JAR(或其功能),那么就使用“Providing”,否则使用“编译”。


查看完整回答
反对 回复 2019-07-15
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

编译

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

提供

这与编译非常相似,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为JavaEnterpriseEdition构建Web应用程序时,您将对ServletAPI和相关JavaEEAPI的依赖设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径上可用,而不是传递性的。

运行时

此范围表示编译时不需要依赖项,而是用于执行的依赖项。它位于运行时和测试类路径中,而不是编译类路径中。

试验

此范围表示正常使用应用程序不需要依赖项,并且仅在测试编译和执行阶段可用。此范围不是传递性的。

系统

这个范围与提供的类似,只是您必须提供包含它的JAR。工件总是可用的,不在存储库中查找。

导入(仅在Maven 2.0.9或更高版本中可用)

此作用域仅支持部分中pom类型的依赖项。它指示要替换为指定POM部分中的依赖项的有效列表的依赖项。由于它们被替换,具有导入范围的依赖关系实际上并不参与限制依赖项的传递性。


查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 533 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信