我有一个带有一个 java 文件的 Maven 项目,它使用 Maven shade 插件来创建一个 uber jar。我的目标是创建一个尽可能小的可执行 jar。我决定在插件中使用minimizeJar参数来使我的 jar 更小。参数是否仅放入运行所需的依赖项或要编译的依赖项,或两者兼而有之?
问问题
2152 次
1 回答
1
答案在您链接到的页面上方:
阴影:阴影
全名:org.apache.maven.plugins:maven-shade-plugin:2.3:shade
描述:执行着色委托给着色器组件的 Mojo。
属性:
- 需要执行一个 Maven 项目。
- 需要范围内工件的依赖解析:运行时。
- 目标是线程安全的并支持并行构建。
- 默认绑定到生命周期阶段:包。
所以包含的工件将是运行时的(因此也是编译时间)。
编辑:有关范围的完整说明,请参阅依赖机制简介 - 依赖范围。
在 maven 中,当您进行依赖解析时,它使用范围的概念 - 三个最重要的是(来自该页面):
- compile - 这是默认范围,如果没有指定则使用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖关系会传播到依赖项目。
- 运行时- 此范围表示编译不需要依赖项,但需要执行。它在运行时和测试类路径中,但不在编译类路径中。
- test - 此范围表示该依赖项对于应用程序的正常使用不是必需的,仅适用于测试编译和执行阶段。
因此,当您在src/main/java下编译源代码时,您将使用具有编译范围的依赖项。当您运行应用程序时,您将使用具有编译或运行时范围的依赖项。当您编译测试时(在src/test/java下),您将使用编译和测试范围。当您使用 surefire 运行测试时,您将使用compile、test和runtime范围的依赖项。
这意味着 minimizeJar 将包含编译和运行时范围的依赖项。
于 2014-07-21T19:28:08.593 回答