ใช้ “maven-shade-plugin” เพื่อสร้าง jar ที่ปฏิบัติการได้เพียง 1 รายการพร้อมการอ้างอิงที่จำเป็นทั้งหมดในนั้นสำหรับ Java หรือ Spring Project ของคุณหรือไม่

เผยแพร่แล้ว: 2016-11-16

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

เพียงสร้างไฟล์ Crunchify.jar หนึ่งไฟล์ที่มีการขึ้นต่อกันทั้งหมดอยู่ภายใน

สัปดาห์ที่แล้วฉันเขียนบทช่วยสอนเกี่ยวกับวิธีใช้ maven-resources-plugin , maven-dependency-plugin & maven-jar-plugin เพื่อสร้าง Jar Project ที่ปฏิบัติการได้ทั้งหมดของคุณหรือไม่ เป็นผลให้มันสร้าง / คัดลอกไฟล์ที่จำเป็นทั้งหมดไปยังโฟลเดอร์ /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 (พร้อมไฟล์ทั้งหมดอยู่ภายใน)

เมื่อไม่กี่วันก่อน ฉันไม่รู้ว่าจะทำอย่างไรให้สำเร็จ เนื่องจากฉันต้องการสร้างการ runnable binary distribution of a standalone Java application โดยใช้ Maven กล่าวอีกนัยหนึ่ง:

  1. จะสร้าง jar ที่ปฏิบัติการได้แบบสปริงด้วย maven ได้อย่างไร?
  2. การสร้าง Runnable Binary Distribution ด้วย Maven สำหรับ Java + Spring + การพึ่งพาอื่น ๆ
  3. จะสร้างโปรเจ็กต์ Java + Spring ด้วย Maven ได้อย่างไร

โดยปกติใน Maven เราใช้การจัดการการพึ่งพา สิ่งประดิษฐ์มีเพียงคลาส/ทรัพยากรของตัวเอง Maven จะต้องรับผิดชอบในการค้นหาสิ่งประดิษฐ์ทั้งหมด (JAR เป็นต้น) ที่โปรเจ็กต์ต้องพึ่งพา ขณะคอมไพล์และสำหรับรัน ฯลฯ

ด้วยความช่วยเหลือของ maven -shade- plugin ฉันสามารถบรรลุเป้าหมายนี้ ได้ มันให้ความสามารถในการจัดแพ็คเกจสิ่งประดิษฐ์ใน uber-jar (One major file jar) รวมถึงการพึ่งพาและการแรเงา - เช่นเปลี่ยนชื่อ - แพ็คเกจของการพึ่งพาบางรายการ

ในโครงการของฉันฉันมีการพึ่งพาอื่น ๆ มากมายเช่น Spring Framework, JSON, เครื่องมือของบุคคลที่สาม ฯลฯ ด้านล่างนี้เป็นเพียงโครงการตัวอย่าง แต่ไฟล์ .jar ที่ใช้งานจริงของฉันออกมา ~5.2MB big

uber-jar เป็นสิ่งที่รับการพึ่งพาทั้งหมด และแยกเนื้อหาของการพึ่งพาและใส่ไว้ใน JAR เดียวด้วยคลาส/ทรัพยากรของโปรเจ็กต์เอง การมี uber-jar นั้นเป็นเรื่อง easy for execution เพราะคุณจะต้องใช้ JAR ขนาดใหญ่เพียงตัวเดียวแทนที่จะเป็น JAR ขนาดเล็กจำนวนมากเพื่อเรียกใช้แอปของคุณ นอกจากนี้ยังช่วยลดความยุ่งยากในการกระจายในบางกรณี

เพื่อให้บรรลุเป้าหมายนี้ คุณต้องอัปเดตไฟล์ pom.xml

ขั้นตอนที่ 1

ดูไฟล์ pom.xml ที่สมบูรณ์ โดยหลักแล้ว คุณจะสนใจแท็ก <build>

อย่างที่คุณเห็นที่นี่ฉันกำลังใช้ Resource Transformers ในไฟล์ pom.xml การรวม classes/resources จากอาร์ติแฟกต์ต่างๆ ให้เป็นหนึ่ง Crunchify JAR นั้นตรงไปตรงมา ตราบใดที่ไม่มีการทับซ้อนกัน ไม่เช่นนั้น จำเป็นต้องมีตรรกะบางอย่างในการผสานทรัพยากรจาก JAR หลายรายการ นี่คือจุดที่หม้อแปลงทรัพยากรเข้ามา

ขั้นตอนที่ 2

เมื่อคุณเพิ่ม maven-shade-plugin ลงในไฟล์ pom.xml แล้ว เพียงใช้คำสั่งด้านล่างเพื่อสร้างโครงการของคุณ

และคุณควรเห็น Crunchify.jar (uber-jar) หนึ่งไฟล์ที่สร้างขึ้นพร้อม all dependencies mentioned in pom.xml file ภายใน

ขั้นตอนที่ 3

ไปที่โฟลเดอร์เป้าหมายของโครงการแล้วคุณจะเห็นไฟล์ Crunchify.jar ถูกสร้างขึ้น เพียงใช้คำสั่ง

$bash> java -jar Crunchify.jar เพื่อดำเนินการโครงการของคุณ

คุณมีอะไรจะเพิ่มไหม เพิ่มในส่วนความคิดเห็นด้านล่าง เพลิดเพลิน มีวันที่ดีข้างหน้าและ Happy Coding