1. Latar belakang proyek
Spring Cloud membangun proyek boot musim semi, memperbaiki tingkat setiap proyek, dan mencapai tujuan mengurangi kopling. Proyek didasarkan pada komunikasi yang tenang.
Selama proses pengemasan proyek, gunakan plugin spring-boot-maven-plugin untuk mengemasnya, dan toples lemak dihasilkan. Jika Paket JAR tidak ritsleting, Anda akan menemukan bahwa paket JAR yang diandalkan proyek disimpan di folder LIB di bawah Boot-Inf. Setelah menganalisis beberapa sub-proyek, Anda akan menemukan bahwa paket JAR yang sama menyumbang sebagian besar. Kemudian, setiap kali digunakan di lingkungan online, toples umum dari setiap sistem sebenarnya berulang kali ditangguhkan di server. Oleh karena itu, Anda secara alami akan memikirkan apakah ada cara untuk mengekstrak paket JAR umum atau paket JAR yang tidak sering dimodifikasi, memilah salinan terpisah, dan kemudian menggunakan pemuatan eksternal untuk mencapai tujuan menurunkan berat badan dengan toples lemak.
2. Toples gemuk melangsingkan
Setelah analisis di atas dan meninjau informasi yang relevan, kami memilah langkah-langkah berikut untuk membuat package jar melangsingkan:
1. Setiap proyek mengkonfigurasi plugin spring-boot-maven-plugin (dokumen resmi) untuk menghasilkan paket JAR yang disimpan dalam toples lemak
<lugin> <Groupid> org.springframework.boot </proupid> <RaintifactId> Spring-boot-maven-plugin </stifactid> <donfiguration> <wapraping> Zip </boot> <!-<celualproupids> org.springframework.boot, org.springfr.springfr.springfr.springfr. tk.mybatis, mysql, com.alibaba, javax.persistence, io.springfox, org.springframework.session </excludeGroupIds> --> <includes> <include> <groupId>xx</groupId> <artifactId>xx</artifactId> </include> <include> <groupId>xx</groupId> <ArTifactId> xx </stifactid> </cert> </cert> </configuration> </lugin>
Seperti kode di atas, Anda dapat menggunakan ExcarcroupidS, atau termasuk, atau tag lainnya, tergantung pada situasinya.
2. Ekstrak paket toples yang tidak ingin Anda simpan di toples lemak dari toples dependensi proyek.
Metode 1 (Disarankan): Tambahkan plug-in dependensi MAVEN ke file Project POM (Dokumen Resmi)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependent-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <id>copy-dependents</id> <phase>package</phase> <goals> <goal>copy-dependents</goal> </goals> <configuration> <!-- <OutputDirectory> e:/lib </OutputDirectory>-> <scludeGroupIds> <!-Tetap dalam nilai atribut grup fat (ganda, terpisah) dari JAR Paket dalam JAR-> </ExpludeGroupids> <suxernapshots> </overwritesnapshots> </configuration> </configation> </overwritesnaps> </configuration> </configation> </overwrites </overwritesnaps> </configuration>
Periksa dokumen resmi untuk makna spesifik tag.
Saat menggunakan Maven untuk mengemas proyek, gunakan perintah Maven:
mvn bersih instalasi -dmaven.test.skip = true -doutputDirectory = e:/lib (-doutputDirectory = e:/lib adalah jalur yang diekspor oleh paket jar yang tergantung pada secara dinamis.
Setelah plug-in konfigurasi mengeksekusi perintah ini, kecuali untuk paket JAR yang dikonfigurasi dalam tag ExcarcroupidS, sisa proyek akan diimpor ke direktori yang ditentukan, dan paket toples berlebih dalam toples lemak akan diekstraksi.
Metode 2: Jangan menambahkan plug-in ketergantungan Maven ke proyek, dan langsung menggunakan MVN untuk menyalin perintah yang bergantung pada paket JAR untuk proyek. Metode ini membutuhkan penyalinan ketergantungan dari masing-masing sub-proyek satu per satu, dan beberapa sub-proyek dapat digunakan.
Ketergantungan MVN: Copy -Dependencies -doutputDirectory = E:/LIB (jika tidak ada direktori yang ditentukan secara dinamis, direktori ketergantungan akan dihasilkan secara default di jalur target proyek)
Masukkan paket toples ketergantungan yang diekspor oleh setiap proyek ke dalam folder, hapus duplikasi, dan hapus paket stoples ketergantungan yang dipesan dalam toples lemak, dan kemudian lengkapi penghapusan paket toples berlebih dalam toples lemak.
3. Tempatkan paket JAR yang diekstraksi di jalur server tertentu, konfigurasikan skrip startup proyek, dan muatkan secara eksternal.
nohup java -dloader.path = "xx/lib" -jar xx.jar
-Dloader.path adalah alamat pemuatan eksternal.
Setelah melangsingkan, Anda dapat melihat dalam paket JAR setelah proyek dikemas. Di Lib di bawah Boot-Inf, hanya ada paket toples yang diperlukan, yang sangat mengurangi ukuran toples lemak.
Konfigurasi POM dapat digunakan dalam sistem Microservice untuk membentuk konfigurasi terpadu, dan dependensi paket JAR di setiap proyek diubah tergantung pada situasi tertentu.
3. Masalah yang ditemui dan solusi
Dalam proses pelangsingan, itu tidak lancar. Ketika saya pikir pekerjaan itu selesai dan memulai proyek, saya menemukan bahwa startup gagal dan toples bertentangan.
1. Menyelesaikan Konflik Paket JAR, menganalisis dependensi paket JAR melalui perintah MVN, dan menemukan paket toples yang bertentangan, dan menyatukan versi.
Di Eclipse, saya membuat Maven Build baru. Pada awalnya, saya mencoba ketergantungan MVN: pohon, dan menganalisis ketergantungan paket JAR secara keseluruhan, tetapi tidak menemukan ketergantungan paket JAR masalah. Kemudian saya mencoba ketergantungan MVN: pohon -dverbose, dan menganalisis semua ketergantungan implisit tidak langsung secara keseluruhan dan masih belum menemukan ketergantungan paket jar mrit masalah.
Pada titik ini, saya menduga tidak ada paket jar dalam proyek. Setelah kemasan yang berulang, saya melihat bahwa masalah ini memang ada dalam ketergantungan proyek, tetapi disembunyikan terlalu dalam. Oleh karena itu, hanya analisis yang dapat dilakukan untuk satu paket jar:
Ketergantungan MVN: Tree -Dverbose -dincludes = XX: XX: XX (XX: XX: XX Sesuai dengan Paket JAR Groupid: Artifactid: Versi)
Setelah menggunakan Dincludes, hubungan ketergantungan dari paket JAR yang sesuai ditemukan, dan paket JAR dikecualikan dalam proyek. Setelah kemasan lagi, proyek dimulai dengan sukses dan masalahnya terpecahkan.
2. Selama proses pengemasan, beberapa sub-proyek tidak menggunakan plugin spring-boot-maven-plugin, tetapi menggunakan maven-jar-plugin untuk secara langsung mengemasnya ke dalam stoples yang dapat dijalankan. Setelah menggabungkan konfigurasi slimming toples lemak, ditemukan bahwa toples yang bisa mengandalkan yang interoperable sekarang telah gagal. Karena stoples lemak melangsingkan, hanya stoples proyek yang kodenya sering diubah tersisa, dan dependensi tidak dilewati dalam stoples yang dapat dijalankan, jadi Anda perlu secara eksplisit bergantung pada paket JAR dari proyek yang diperlukan dalam proyek ini untuk memastikan kelengkapan proyek.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.