代码之家  ›  专栏  ›  技术社区  ›  user3704915

当使用minimizeJar函数时,Maven shade插件如何决定将哪些依赖项放入最终的jar中?

  •  1
  • user3704915  · 技术社区  · 10 年前

    我有一个带有一个java文件的Maven项目,它使用Maven shade插件来创建一个uber jar。我的目标是创建一个尽可能小的可执行jar。我决定使用 minimizeJar 参数使我的jar变小。该参数是否只包含运行所需的依赖项或编译的依赖项,或者两者都包含?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Matthew Farwell    10 年前

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

    着色:着色

    全名:org.apache.maven.plugins:maven-schad-plugin:2.3:chad

    描述:对着色器组件执行着色委派的Mojo。

    属性:

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

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

    编辑:有关范围的完整解释,请参见 Introduction to the dependency mechanism - Dependency Scope .

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

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

    因此,当您在 src/main/java ,您将使用依赖项 编写 范围运行应用程序时,将使用依赖项 编写 运行时间 范围当您编译测试时(在 src/test/java ),您将使用 编写 测验 范围。使用surefire运行测试时,将使用 编写 , 测验 运行时间 范围。

    这意味着minimizeJar将包含以下依赖项 编写 运行时间 范围