1. พื้นหลังโครงการ
Spring Cloud สร้างโครงการสปริงบูตปรับระดับของแต่ละโครงการและบรรลุวัตถุประสงค์ในการลดการมีเพศสัมพันธ์ โครงการนี้ขึ้นอยู่กับการสื่อสารที่เต็มไปด้วยความสงบ
ในระหว่างกระบวนการบรรจุภัณฑ์โครงการให้ใช้ปลั๊กอินสปริง-แมงมุม-แมรี่-แมรี่-พลาลูกเพื่อจัดทำมันและขวดไขมันจะถูกสร้างขึ้น หากแพ็คเกจ JAR ถูกยกเลิกซิปคุณจะพบว่าแพ็คเกจ JAR ที่โครงการขึ้นอยู่กับจะถูกเก็บไว้ในโฟลเดอร์ LIB ภายใต้ BOOT-INF หลังจากวิเคราะห์โครงการย่อยหลายโครงการคุณจะพบว่าบัญชีแพ็คเกจ JAR เดียวกันสำหรับคนส่วนใหญ่ จากนั้นทุกครั้งที่มีการปรับใช้ในสภาพแวดล้อมออนไลน์ขวดทั่วไปของแต่ละระบบจะถูกปิดกั้นซ้ำ ๆ บนเซิร์ฟเวอร์ ดังนั้นคุณจะนึกถึงว่ามีวิธีการแยกแพ็คเกจ JAR ทั่วไปหรือแพ็คเกจ JAR ที่ไม่ได้รับการแก้ไขบ่อยครั้งจัดเรียงสำเนาแยกต่างหากจากนั้นใช้การโหลดภายนอกเพื่อให้ได้จุดประสงค์ในการลดน้ำหนักโดยขวดไขมัน
2. ไขมันโถผอมเพรียว
หลังจากการวิเคราะห์ข้างต้นและตรวจสอบข้อมูลที่เกี่ยวข้องเราได้จัดทำขั้นตอนต่อไปนี้เพื่อให้ Jar-Package Slimming:
1. แต่ละโครงการกำหนดค่าปลั๊กอิน Spring-Boot-Maven-Plugin (เอกสารอย่างเป็นทางการ) เพื่อสร้างแพ็คเกจ JAR ที่เก็บไว้ในขวดไขมัน
<Plugin> <roupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Maven-Plugin </artifactid> <การกำหนดค่า> <layout> ZIP </layout> <! org.mybatis.spring.boot, tk.mybatis, mysql, com.alibaba, javax.persistence, io.springfox, org.springframework.session </excludegroupids> -> <roupId> xx </groupId> <ratifactId> xx </artifactId> </culf> </cold> </การกำหนดค่า> </plugin>
เช่นเดียวกับรหัสข้างต้นคุณสามารถใช้ ExcludeGroupids หรือรวมหรือแท็กอื่น ๆ ขึ้นอยู่กับสถานการณ์
2. แยกแพ็คเกจขวดที่คุณไม่ต้องการเก็บไว้ในขวดไขมันจากขวดการพึ่งพาโครงการ
วิธีที่ 1 (แนะนำ): เพิ่มปลั๊กอินการพึ่งพา Maven ลงในไฟล์ Project POM (เอกสารอย่างเป็นทางการ)
<Plugin> <roupId> org.apache.maven.plugins </groupId> <ratifactid> maven--พึ่งพา-ปัสสาวะ </artifactid> <sersion> 3.1.1 </เวอร์ชัน> <cenections> <EutputDirectory> e:/lib </utputDirectory>-> <excludegroupids> <!-ยังคงอยู่ในค่าแอตทริบิวต์กลุ่ม FAT (หลายตัวแยก) ของแพ็คเกจ JAR ใน JAR-> </excludegroupids> <OverwritesNapShots> true </overwritesnapshots>
ตรวจสอบเอกสารอย่างเป็นทางการสำหรับความหมายเฉพาะของแท็ก
เมื่อใช้ Maven เพื่อจัดทำโครงการให้ใช้คำสั่ง maven:
MVN Clean Install -dmaven.test.skip = true -doutputDirectory = e:/lib (-doutputDirectory = e:/lib คือเส้นทางที่ส่งออกโดยแพ็คเกจ JAR ที่โครงการขึ้นอยู่กับแบบไดนามิก
หลังจากปลั๊กอินการกำหนดค่าดำเนินการคำสั่งนี้ยกเว้นแพ็คเกจ JAR ที่กำหนดค่าไว้ในแท็ก ExcludeGroupids ส่วนที่เหลือของโครงการจะถูกนำเข้าสู่ไดเรกทอรีที่ระบุและแพ็คเกจ JAR ส่วนเกินในขวดไขมันจะถูกสกัด
วิธีที่ 2: อย่าเพิ่มปลั๊กอินการพึ่งพา Maven ในโครงการและใช้ MVN โดยตรงเพื่อคัดลอกคำสั่งที่ขึ้นอยู่กับแพ็คเกจ JAR สำหรับโครงการ วิธีนี้ต้องใช้การคัดลอกการพึ่งพาของแต่ละโครงการย่อยทีละโครงการและสามารถใช้โครงการย่อยไม่กี่โครงการ
การพึ่งพา MVN: การคัดลอก -พึ่งพา -DOUTPUTDIRECTORY = E:/lib (หากไม่มีการระบุไดเรกทอรีแบบไดนามิกไดเรกทอรีการพึ่งพาจะถูกสร้างขึ้นโดยค่าเริ่มต้นในเส้นทางเป้าหมายของโครงการ)
วางแพ็คเกจขวดที่พึ่งพาส่งออกโดยแต่ละโครงการลงในโฟลเดอร์ลบการทำซ้ำและลบแพ็คเกจขวดที่พึ่งพาที่สงวนไว้ในขวดไขมันแล้วทำการกำจัดแพ็คเกจขวดส่วนเกินในขวดไขมัน
3. วางแพ็คเกจ JAR ที่แยกออกมาในเส้นทางที่แน่นอนของเซิร์ฟเวอร์กำหนดค่าสคริปต์การเริ่มต้นโครงการและโหลดภายนอก
nohup java -dloader.path = "xx/lib" -jar xx.jar
-dloader.Path เป็นที่อยู่การโหลดภายนอก
หลังจากลดขนาดลงคุณสามารถเห็นได้ในแพ็คเกจ JAR หลังจากบรรจุโครงการ ใน lib ภายใต้ boot-inf มีเพียงแพ็คเกจขวดที่จำเป็นเท่านั้นซึ่งจะลดขนาดของขวดไขมันอย่างมาก
การกำหนดค่าของ POM สามารถใช้ในระบบ microservice เพื่อสร้างการกำหนดค่าแบบครบวงจรและการพึ่งพาแพ็คเกจ JAR ในแต่ละโครงการจะเปลี่ยนไปขึ้นอยู่กับสถานการณ์เฉพาะ
3. ปัญหาที่พบและการแก้ปัญหา
ในขั้นตอนการลดน้ำหนักมันไม่ได้ล่องเรือที่ราบรื่น เมื่อฉันคิดว่างานเสร็จแล้วและเริ่มโครงการฉันพบว่าการเริ่มต้นล้มเหลวและ JAR ขัดแย้งกัน
1. แก้ไขความขัดแย้งของแพ็คเกจ JAR วิเคราะห์การพึ่งพาของแพ็คเกจ JAR ผ่านคำสั่ง MVN และค้นหาแพ็คเกจ JAR ที่ขัดแย้งกันและรวมเวอร์ชันเข้าด้วยกัน
ใน Eclipse ฉันสร้าง Maven Build ใหม่ ในตอนแรกฉันลองใช้ MVN Predency: Tree และวิเคราะห์การพึ่งพาแพ็คเกจ JAR โดยรวม แต่ไม่พบการพึ่งพาของแพ็คเกจ JAR ที่มีปัญหา จากนั้นฉันก็ลองใช้ MVN: ต้นไม้ -dverbose และวิเคราะห์การพึ่งพาโดยนัยทางอ้อมทั้งหมดโดยรวมและยังไม่พบการพึ่งพาของแพ็คเกจ Jar ปัญหา
ณ จุดนี้ฉันสงสัยว่าไม่มีแพ็คเกจ Jar ในโครงการ หลังจากบรรจุภัณฑ์ซ้ำ ๆ ฉันเห็นว่าปัญหานี้อยู่ในการพึ่งพาโครงการ แต่มันถูกซ่อนอยู่ลึกเกินไป ดังนั้นการวิเคราะห์เท่านั้นที่สามารถทำได้สำหรับแพ็คเกจ JAR เดียวเท่านั้น:
การพึ่งพา MVN: ต้นไม้ -dverbose -dincludes = xx: xx: xx (xx: xx: xx สอดคล้องกับ jar package groupid: artifactid: เวอร์ชัน)
หลังจากใช้ dincludes ความสัมพันธ์การพึ่งพาของแพ็คเกจ JAR ที่เกี่ยวข้องจะพบและแพ็คเกจ JAR จะถูกแยกออกในโครงการ หลังจากบรรจุภัณฑ์อีกครั้งโครงการเริ่มสำเร็จและปัญหาได้รับการแก้ไข
2. ในระหว่างกระบวนการบรรจุภัณฑ์โครงการย่อยบางโครงการไม่ได้ใช้ปลั๊กอิน Spring-Boot-Maven-Plugin แต่ใช้ Maven-Jar-Plugin เพื่อบรรจุลงในขวดที่เรียกใช้โดยตรง หลังจากรวมการกำหนดค่า Slimming Jar Fat พบว่าขวดที่อาจพึ่งพาการทำงานร่วมกันได้ในขณะนี้ล้มเหลว เนื่องจากขวดไขมันลดลงมีเพียงขวดของโครงการที่มีการเปลี่ยนแปลงรหัสบ่อยครั้งและการพึ่งพาไม่ผ่านในขวดที่วิ่งได้ดังนั้นคุณต้องพึ่งพาแพ็คเกจ JAR ของโครงการที่จำเป็นในโครงการนี้อย่างชัดเจนเพื่อให้แน่ใจว่าโครงการสมบูรณ์
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น