maven范围编译和为JAR打包提供的不同之处

maven范围编译和为JAR打包提供的不同之处,maven,jar,Maven,Jar,当工件构建为JAR时,maven作用域编译和提供的之间有什么区别?如果是战争,我会理解——该工件将包含在WEB-INF/lib中,或者不包含在WEB-INF/lib中。但对于JAR来说,这并不重要——不包括依赖项。当它们的作用域是compile或提供时,它们必须位于类路径上。我知道提供的依赖项是不可传递的-但这只是一个区别吗?与: 编译 这是默认范围,在未指定任何范围时使用。编撰 依赖项在项目的所有类路径中都可用。 此外,这些依赖关系将传播到依赖项目 提供 这与compile非常相似,但表示您

当工件构建为JAR时,maven作用域
编译
和提供的
之间有什么区别?如果是战争,我会理解——该工件将包含在WEB-INF/lib中,或者不包含在WEB-INF/lib中。但对于JAR来说,这并不重要——不包括依赖项。当它们的作用域是
compile
提供时,它们必须位于类路径上。我知道
提供的
依赖项是不可传递的-但这只是一个区别吗?

与:

  • 编译

    这是默认范围,在未指定任何范围时使用。编撰 依赖项在项目的所有类路径中都可用。 此外,这些依赖关系将传播到依赖项目

  • 提供

    这与compile非常相似,但表示您希望使用JDK或 容器在运行时提供依赖项。例如,当 要为Java企业版构建web应用程序,您需要 将ServletAPI和相关JavaEEAPI的依赖关系设置为 提供范围,因为web容器提供这些类。这 作用域仅在编译和测试类路径上可用,并且 不及物

概述:

  • 依赖项是不可传递的(如您所提到的)
  • 提供的作用域仅在编译和测试类路径上可用,而编译作用域在所有类路径中都可用
  • 提供的依赖项未打包
来自:

  • 编译

    这是默认范围,在未指定任何范围时使用。编撰 依赖项在项目的所有类路径中都可用。 此外,这些依赖关系将传播到依赖项目

  • 提供

    这与compile非常相似,但表示您希望使用JDK或 容器在运行时提供依赖项。例如,当 要为Java企业版构建web应用程序,您需要 将ServletAPI和相关JavaEEAPI的依赖关系设置为 提供范围,因为web容器提供这些类。这 作用域仅在编译和测试类路径上可用,并且 不及物

概述:

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

如果您计划生成一个包含所有依赖项的JAR文件(典型的xxxx all.JAR),那么提供的作用域很重要,因为该作用域内的类不会打包到结果JAR中


有关更多信息,请参见maven assembly plugin

如果您计划生成一个包含所有依赖项的JAR文件(典型的xxxx all.JAR),那么提供的范围很重要,因为此范围内的类不会被打包到结果JAR中

有关更多信息,请参阅maven汇编插件

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

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

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

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

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

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

  • 编撰
在类路径中可用,若它是普通jar,不要将此依赖项添加到最终jar中;但若最终的jar是一个jar(例如,可执行jar),那个么将这个jar添加到jar中

  • 提供
依赖项将在运行时环境中可用,因此在任何情况下都不要添加此依赖项;即使不是在单个jar中(即可执行jar等)

  • 编撰
在类路径中可用,若它是普通jar,不要将此依赖项添加到最终jar中;但若最终的jar是一个jar(例如,可执行jar),那个么将这个jar添加到jar中

  • 提供

依赖项将在运行时环境中可用,因此在任何情况下都不要添加此依赖项;即使不是在单个jar中(即可执行jar等)

对于jar文件,如果在maven jar插件配置中将addClassPath设置为true,则区别在于jar中包含的MANIFEST.MF文件中列出的类路径“编译”依赖项将出现在清单中,“提供”依赖项不会出现


我最讨厌的一件事是这两个词的时态应该相同。要么编译并提供,要么编译并提供。

对于jar文件,如果在maven jar插件配置中将addClassPath设置为true,则区别在于jar中包含的MANIFEST.MF文件中列出的类路径。”“编译”依赖项将出现在清单中,“提供”依赖项不会出现

我最讨厌的一件事是这两个词的时态应该相同。要么编译并提供,要么编译并发布