1

我有一个带有一个 java 文件的 Maven 项目,它使用 Maven shade 插件来创建一个 uber jar。我的目标是创建一个尽可能小的可执行 jar。我决定在插件中使用minimizeJar参数来使我的 jar 更小。参数是否仅放入运行所需的依赖项或要编译的依赖项,或两者兼而有之?

4

1 回答 1

1

答案在您链接到的页面上方:

阴影:阴影

全名:org.apache.maven.plugins:maven-shade-plugin:2.3:shade

描述:执行着色委托给着色器组件的 Mojo。

属性:

  • 需要执行一个 Maven 项目。
  • 需要范围内工件的依赖解析:运行时。
  • 目标是线程安全的并支持并行构建。
  • 默认绑定到生命周期阶段:包。

所以包含的工件将是运行时的(因此也是编译时间)。

编辑:有关范围的完整说明,请参阅依赖机制简介 - 依赖范围

在 maven 中,当您进行依赖解析时,它使用范围的概念 - 三个最重要的是(来自该页面):

  • compile - 这是默认范围,如果没有指定则使用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖关系会传播到依赖项目。
  • 运行时- 此范围表示编译不需要依赖项,但需要执行。它在运行时和测试类路径中,但不在编译类路径中。
  • test - 此范围表示该依赖项对于应用程序的正常使用不是必需的,仅适用于测试编译和执行阶段。

因此,当您在src/main/java下编译源代码时,您将使用具有编译范围的依赖项。当您运行应用程序时,您将使用具有编译运行时范围的依赖项。当您编译测试时(在src/test/java下),您将使用编译测试范围。当您使用 surefire 运行测试时,您将使用compiletestruntime范围的依赖项。

这意味着 minimizeJar 将包含编译运行时范围的依赖项。

于 2014-07-21T19:28:08.593 回答