使用“maven-shade-plugin”为您的 Java 或 Spring 项目创建 1 个可执行 jar,其中包含所有必需的依赖项?

已发表: 2016-11-16

maven-shade-plugin-how-to-create-javaspring-based-executable-jar-with-all-required-dependencies

只需创建一个包含所有依赖项的Crunchify.jar文件

上周我写了一篇关于如何使用maven-resources-pluginmaven-dependency-pluginmaven-jar-plugin生成完整可执行 Jar 项目的教程? 结果,它创建/复制所有需要的文件到/target/Crunchify文件夹。

Before:使用 maven-resource、maven-dependency、maven-jar 插件:

maven-resources-maven-dependency-maven-jar-plugin-to-build-java-project

After:使用 maven-shade 插件:

create-just-1-executable-jar-with-all-required-dependencies-properties-and-resources-file-in-it-for-your-java-or-spring-project

让我们开始了解如何实现上述结果:

如您所见,我们将 Java Project 中的所有内容都捆绑到just one file中,并命名为Crunchify.jar (其中包含所有文件)。

几天前,我不知道如何实现这一点,因为我想使用 Maven 创建runnable binary distribution of a standalone Java application 。 换一种说法:

  1. 如何使用 maven 创建基于 spring 的可执行 jar?
  2. 使用 Maven 为 Java + Spring + 其他依赖项创建可运行的二进制分发
  3. 如何使用 Maven 构建 Java + Spring 项目?

通常在 Maven 中,我们依赖于依赖管理。 工件仅包含其自身的类/资源。 Maven 将负责在编译和运行等时找出项目所依赖的所有工件(JAR 等)。

maven -shade- plugin的帮助下,我能够实现这个目标。 它提供了将工件打包到uber-jar (One major file jar)中的能力,包括它的依赖项和遮蔽(即重命名)一些依赖项的包。

在我的项目中,我有很多其他依赖项,即 Spring Framework、JSON、3rd Party 工具等。下面只是一个示例项目,但我的生产 .jar 文件~5.2MB big

一个uber-jar是一种获取所有依赖项的东西,并提取依赖项的内容并将其与项目本身的类/资源一起放入一个 JAR 中。 通过拥有这样的 uber-jar, easy for execution ,因为您只需要一个大 JAR 而不是大量的小 JAR 来运行您的应用程序。 在某些情况下,它还可以简化分发。

为了实现这一点,您需要更新您的 pom.xml 文件。

第1步

查看完整的pom.xml文件。 主要是你会对<build>标签感兴趣。

正如您在此处看到的,我在 pom.xml 文件中使用Resource Transformers器。 只要没有重叠,将多个工件中的classes/resources聚合到一个Crunchify JAR中是直接的。 否则,需要某种逻辑来合并来自多个 JAR 的资源。 这就是资源转换器发挥作用的地方。

第2步

maven-shade-plugin添加到pom.xml文件后,只需使用以下命令来构建您的项目。

您应该会看到一个Crunchify.jar (uber-jar) 文件,其中all dependencies mentioned in pom.xml file项。

第三步

转到项目的目标文件夹,您将看到创建的 Crunchify.jar 文件。 只需使用命令

$bash> java -jar Crunchify.jar来执行你的项目。

你有什么要补充的吗? 将其添加到下面的评论部分。 享受,祝您有美好的一天,快乐的编码。