我有一个带有一个java文件的Maven项目,它使用Maven shade插件创建一个超级jar。我的目标是创建一个尽可能小的可执行jar。我决定使用插件中的minimizeJar参数来减小我的jar。参数是仅放入运行所需的依赖项还是要编译的依赖项或两者兼而有之?
答案 0 :(得分:1)
答案是您链接到的页面的更上一层:
<强>遮阳:遮阳强>
全名:org.apache.maven.plugins:maven-shade-plugin:2.3:shade
描述:执行着色委托给着色器组件的Mojo。
属性:
- 需要执行Maven项目。
- 要求范围内工件的依赖性解析:运行时。
- 目标是线程安全的,并支持并行构建。
- 默认情况下绑定到生命周期阶段:package。
所以包含的工件将是运行时(因此编译时也是如此)。
编辑:有关范围的完整说明,请参阅Introduction to the dependency mechanism - Dependency Scope。
在maven中,当你进行依赖项解析时,它会使用范围的概念 - 最重要的三个是(来自该页面):
因此,当您在 src / main / java 下编译源代码时,您将使用 compile 范围内的依赖项。运行应用程序时,将使用 compile 或 runtime 范围的依赖项。编译测试时(在 src / test / java 下),您将使用编译和测试范围。使用surefire运行测试时,您将使用 compile , test 和 runtime 范围的依赖项。
这意味着minimizeJar将包含 compile 和 runtime 范围的依赖项。