Gunakan "maven-shade-plugin" untuk Membuat hanya 1 toples yang dapat dieksekusi dengan semua Dependensi yang diperlukan di dalamnya untuk Proyek Java atau Musim Semi Anda?

Diterbitkan: 2016-11-16

maven-shade-plugin-cara-membuat-javaspring-based-executable-jar-with-all-required-dependencies

Cukup buat satu file Crunchify.jar dengan semua dependensi di dalamnya

Minggu lalu saya menulis tutorial tentang cara menggunakan maven-resources-plugin , maven-dependency-plugin & maven-jar-plugin untuk menghasilkan Proyek Jar lengkap yang dapat dieksekusi? Akibatnya ia membuat / menyalin semua file yang diperlukan ke folder /target/Crunchify .

Before: Menggunakan plugin maven-resource, maven-dependency, maven-jar:

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

After: Menggunakan plugin maven-shade:

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

Mari kita mulai bagaimana mencapai hasil di atas:

Di sini seperti yang Anda lihat, kami telah menggabungkan semuanya dari Proyek Java menjadi just one file dan kami telah memberi nama Crunchify.jar (dengan semua file di dalamnya).

Beberapa hari yang lalu saya tidak tahu bagaimana mencapainya karena saya ingin membuat runnable binary distribution of a standalone Java application dengan menggunakan Maven. Dengan kata lain:

  1. Bagaimana cara membuat toples yang dapat dieksekusi berbasis pegas dengan maven?
  2. Membuat Distribusi Biner yang Dapat Dijalankan Dengan Maven untuk Java + Spring + Dependensi lainnya
  3. Bagaimana Cara Membangun Proyek Java + Spring dengan Maven?

Biasanya di Maven, kami mengandalkan manajemen ketergantungan. Artefak hanya berisi kelas/sumber daya itu sendiri. Maven akan bertanggung jawab untuk mengetahui semua artefak (JAR dll) yang bergantung pada proyek, saat kompilasi dan untuk menjalankan dll.

Dengan bantuan maven -shade- plugin saya dapat mencapai tujuan ini . Ini menyediakan kemampuan untuk mengemas artefak dalam uber-jar (One major file jar) , termasuk dependensinya dan untuk menaungi – yaitu mengganti nama – paket dari beberapa dependensi.

Dalam proyek saya, saya memiliki begitu banyak dependensi lain, yaitu Spring Framework, JSON, alat Pihak ke-3, dll. Di bawah ini hanyalah proyek sampel tetapi file .jar produksi saya menjadi ~5.2MB big .

Sebuah uber-jar adalah sesuatu yang mengambil semua dependensi, dan mengekstrak konten dependensi dan memasukkannya ke dalam satu JAR, dengan kelas/sumber daya dari proyek itu sendiri. Dengan memiliki uber-jar seperti itu, easy for execution , karena Anda hanya memerlukan satu JAR besar daripada berton-ton JAR kecil untuk menjalankan aplikasi Anda. Ini juga memudahkan distribusi dalam beberapa kasus.

Untuk mencapai ini, Anda perlu memperbarui file pom.xml Anda.

Langkah 1

Lihatlah file pom.xml lengkap. Terutama Anda akan tertarik pada <build> .

Seperti yang Anda lihat di sini, saya menggunakan Resource Transformers dalam file pom.xml. Menggabungkan classes/resources dari beberapa artefak menjadi satu Crunchify JAR dapat dilakukan dengan mudah selama tidak ada tumpang tindih. Jika tidak, beberapa jenis logika untuk menggabungkan sumber daya dari beberapa JAR diperlukan. Di sinilah transformator sumber daya berperan.

Langkah 2

Setelah Anda menambahkan maven-shade-plugin ke file pom.xml Anda, gunakan saja perintah di bawah ini untuk membangun proyek Anda.

Dan Anda akan melihat satu Crunchify.jar (uber-jar) dibuat dengan all dependencies mentioned in pom.xml file dalamnya.

Langkah-3

Buka folder target proyek Anda dan Anda akan melihat file Crunchify.jar telah dibuat. Cukup gunakan perintah

$bash> java -jar Crunchify.jar untuk menjalankan proyek Anda.

Apakah Anda memiliki sesuatu untuk ditambahkan? Tambahkan ke bagian komentar di bawah. Selamat menikmati, Semoga harimu menyenangkan dan Selamat Coding.