使用“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來執行你的項目。

你有什麼要補充的嗎? 將其添加到下面的評論部分。 享受,祝您有美好的一天,快樂的編碼。