แนวคิดและหัวข้อโครงการ Maven หลายโมดูลที่น่าตื่นเต้น 5 อันดับแรกสำหรับผู้เริ่มต้น [2022]
เผยแพร่แล้ว: 2021-05-27เมื่อโปรเจ็กต์ซับซ้อนและซับซ้อนมากขึ้น วิธีที่ถูกต้องในการจัดการคือการแยกเป็นโมดูลต่างๆ ใน Maven แม้ว่าจะสามารถเชื่อมโยงหลายโครงการเหล่านี้เป็นการพึ่งพาได้ แต่ก็ทำให้กระบวนการสร้างซับซ้อนมากขึ้น ดังนั้น แนวทางที่ต้องการคือการจัดโครงสร้างโปรเจ็กต์เป็นแบบหลายโมดูล และส่งต่อส่วนที่เหลือให้ Maven
สารบัญ
ประโยชน์ของการใช้หลายโมดูลใน Maven
ข้อได้เปรียบที่สำคัญของการใช้หลายโมดูลแทนการฉีดการพึ่งพาหรือขั้นตอนอื่นๆ คือช่วยลดความซ้ำซ้อน เพื่อให้เข้าใจได้ดีขึ้น สมมติว่าคุณกำลังทำงานกับแอปพลิเคชันที่ประกอบด้วยสองโมดูล – สมมติว่าโมดูลแบ็กเอนด์และโมดูลส่วนหน้า
หากคุณทำงานบนโมดูลทั้งสองและเปลี่ยนฟังก์ชันการทำงานบางอย่างที่ส่งผลต่อทั้งสองโมดูล คุณจะต้องสร้างทั้งโมดูลหรือส่วนประกอบแยกกันโดยไม่มีเครื่องมือสร้างเฉพาะ หรือคุณต้องเขียนสคริปต์เพื่อคอมไพล์โค้ด รันการทดสอบ และแสดงผลสุดท้าย
ตอนนี้ หากความซับซ้อนเพิ่มมากขึ้นไปอีก และโครงการของคุณมีโมดูลมากกว่าสองโมดูล การทำงานนี้ก็จะยากขึ้นเรื่อยๆ โดยไม่ต้องใช้เครื่องมือสร้างเฉพาะ นอกจากนี้ ในปัญหาในโลกแห่งความเป็นจริง โปรเจ็กต์ของคุณอาจต้องใช้ปลั๊กอิน Maven เพื่อดำเนินการที่สำคัญบางอย่างในระหว่างวงจรชีวิตบิลด์ทั้งหมด แชร์การพึ่งพา หรือรวมโปรเจ็กต์ BOM อื่นๆ
เป็นผลมาจากความท้าทายเหล่านี้ หลายโมดูลใน Maven มีประโยชน์อย่างมาก และให้คุณสร้างโมดูลของแอปพลิเคชันในบรรทัดคำสั่งเดียว นอกจากนี้ยังช่วยให้คุณสามารถแบ่งปันข้อมูลและการกำหนดค่าจำนวนมากระหว่างโมดูลต่างๆ ได้อย่างราบรื่น
อ่านเพิ่มเติม: ตอบคำถามสัมภาษณ์ Maven
คำสำคัญที่ควรทราบเกี่ยวกับโปรเจ็กต์หลายโมดูลใน Maven
1. POM พาเรนต์ (Project Object Module)
ไฟล์ pom.xml แต่ละไฟล์ใน Maven – เพื่อรองรับการสืบทอด – มี POM พาเรนต์หรือที่เรียกว่า Super POM ซึ่งสามารถอยู่ในไบนารี Maven และคุณยังสามารถรวมสองไฟล์เพื่อสร้าง POM ที่มีประสิทธิภาพ
ดังนั้น คุณสามารถสร้างไฟล์ pom.xml ของคุณเองเพื่อใช้เป็นพาเรนต์สำหรับโปรเจ็กต์ของคุณได้ เมื่อคุณทำเสร็จแล้ว คุณสามารถเพิ่มการพึ่งพาและการกำหนดค่าทั้งหมด ตั้งค่าเป็นพาเรนต์ของโมดูลย่อย และเปิดใช้งานการสืบทอด นอกจากการสืบทอด Maven ยังจัดให้มีการรวม POM หลักที่ใช้ประโยชน์จากฟังก์ชันการรวมเรียกว่า POM รวม – POM ประเภทนี้ประกาศโมดูลย่อยอย่างชัดเจนในไฟล์ pom.xml
2. โมดูลย่อย
โครงการย่อย หรือที่เรียกว่าโมดูลย่อย สามารถเข้าใจได้ว่าเป็นโมดูล Maven มาตรฐานที่สืบทอดมาจาก POM พาเรนต์ การใช้การสืบทอด โมดูลจะแบ่งปันการพึ่งพาและการกำหนดค่าต่างๆ อย่างไรก็ตาม หากคุณต้องการสร้างโปรเจ็กต์อย่างรวดเร็ว คุณจะต้องประกาศโมดูลย่อยใน Parent POM อย่างชัดแจ้ง ซึ่งทำให้เป็น POM รวม
3. โครงการหลายโมดูลอย่างง่าย
App และ util เป็นสองโมดูลที่มีอยู่ในโครงการ Simple Multi-Module โมดูล util จำเป็นสำหรับการจัดหาวิธีการแบบคงที่ในการรวมหรือผนวกสตริงที่แตกต่างกันโดยใช้ไลบรารี Apache Commons Lang และโมดูลแอปจำเป็นต้องเรียกใช้โมดูล util นี่เป็นตัวอย่างจากไฟล์ app.java:
simple-multi/app/src/main/java/app/App.java
แอปคลาสสาธารณะ {
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
System.out.println(แอพใหม่().greet("โลก!"));
}
สตริงทักทายสาธารณะ (ชื่อสตริง) {
ส่งคืน Util.join(“สวัสดี” ชื่อ);
}
}
ในการสร้างโครงการให้เรียกใช้
$ cd simple-multi
$ mvn การทดสอบที่สะอาด
ตัวสร้างโค้ดของ Maven สร้างทั้งโมดูลของโครงการของคุณในลำดับที่ถูกต้อง ทำการทดสอบที่จำเป็น และแสดงผลในรูปแบบสรุปที่เข้าใจได้ง่าย เช่นด้านล่าง:
4. โครงสร้างของโครงการหลายโมดูล
นี่คือเลย์เอาต์ของโปรเจ็กต์ Multi-Module อย่างง่าย:
ไดเร็กทอรี simple-multi คือไดเร็กทอรีรากและมีอยู่ที่ด้านบนสุดของโปรเจ็กต์ทั้งหมด ประกอบด้วย POM ระดับบนสุด (Parent POM) แต่ Parent POM นี้ไม่มีโฟลเดอร์ต้นทาง
ไดเร็กทอรีระดับบนสุดยังมี app และ util ซึ่งเป็นโปรเจ็กต์ Maven ปกติที่มีไดเร็กทอรีและไฟล์ pom.xml
POM ระดับบนสุดและโมดูล POM แตกต่างจาก POM ปกติเล็กน้อย มาดูรายละเอียดกันว่ามีอะไรบ้าง:
5. POM ระดับบนสุด
POM หลักหรือ POM ระดับบนสุดเป็นสิ่งจำเป็นโดย Maven Multi-Module Project ที่ไดเร็กทอรีราก
POM ระดับบนสุดกำหนดลักษณะสำคัญและพิกัดโครงการ เช่น รหัสสิ่งประดิษฐ์ เวอร์ชัน และรหัสกลุ่ม เช่นเดียวกับในโครงการปกติใดๆ อย่างไรก็ตาม ประเภทบรรจุภัณฑ์สำหรับสิ่งนี้ไม่ได้อยู่ในรูปแบบ war หรือ jar ปกติ แต่เป็นแบบปอม เนื่องจากโมดูลระดับบนสุดไม่มีไดเร็กทอรีต้นทางเพิ่มเติม โมดูล/องค์ประกอบโมดูลเพิ่มแอปและโมดูล util
เนื้อหาของไฟล์นี้รวมถึง:
simple-multi/pom.xml
<โครงการ xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>
<groupId>org.codetab</groupId>
<artifactId>simple-multi</artifactId>
<version>1.0</version>
<บรรจุภัณฑ์>ปอม</packaging>
<โมดูล>
<module>แอพ</module>
<module>ใช้</module>
</modules>
</project>
โดยสรุป POM ระดับบนสุดจะระบุประเภทบรรจุภัณฑ์ pom และแสดงรายการโมดูลย่อยทั้งหมดอย่างชัดเจน
โปรดทราบว่าคุณไม่จำเป็นต้องกังวลเกี่ยวกับการสั่งซื้อในขณะที่ประกาศโมดูลย่อยใน Parent POM เนื่องจาก Maven ใช้เครื่องปฏิกรณ์เพื่อสั่งซื้อโมดูลที่อยู่ในรายการอย่างถูกต้อง ใน simple-multi maven จะสร้างโมดูล util แล้วจึงแอพเนื่องจากแอพนั้นขึ้นอยู่กับ util
5. โมดูล POM
โฟลเดอร์ Module POM มีโฟลเดอร์ต้นทางปกติและไฟล์ pom.xml ของตัวเอง เนื้อหาของ util/pom.xml นี้คือ:
util/pom.xml
<โครงการ xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>
<แม่>
<groupId>org.codetab</groupId>
<artifactId>simple-multi</artifactId>
<version>1.0</version>
</parent>
<artifactId>ใช้</artifactId>
<คุณสมบัติ>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</คุณสมบัติ>
<การพึ่งพา>
<การพึ่งพา>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
<การพึ่งพา>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>ทดสอบ</scope>
</dependency>
</dependencies>
</project>
ไม่จำเป็นต้องระบุ groupID และเวอร์ชันสำหรับโมดูล เนื่องจากจะรับช่วงมาจากพาเรนต์ บล็อกการพึ่งพา/การพึ่งพาจะกำหนดการอ้างอิงของโมดูล util – commons-lang3 และ JUnit
ทีนี้ มาดูที่ app/pom.xml ซึ่งค่อนข้างคล้ายกับ util/pom.xml ยกเว้นบล็อกการพึ่งพาที่แสดงด้านล่าง:
app/pom.xml
….
<การพึ่งพา>
<การพึ่งพา>
<groupId>org.codetab</groupId>
<artifactId>ใช้</artifactId>
<version>1.0</version>
</dependency>
….
</dependencies>
โมดูลแอปใช้เมธอดจากโมดูล util และสำหรับสิ่งนี้ app/pom.xml จะระบุ util เป็นการพึ่งพา
เพื่อสรุปทุกสิ่งที่อธิบายไว้ข้างต้น:
โครงการระดับบนสุด (โครงการหลัก)
- กำหนด pom.xml ระดับบนสุด ซึ่งระบุพิกัดและโมดูลย่อยทั้งหมด และตั้งค่าประเภทบรรจุภัณฑ์เป็น pom
- ประกอบด้วยโฟลเดอร์โมดูลเพิ่มเติม
- ไม่มีโฟลเดอร์ต้นทาง
แต่ละโฟลเดอร์โมดูลไม่มีอะไรเลยนอกจากไดเร็กทอรีโปรเจ็กต์ Maven ปกติ อย่างไรก็ตาม ไฟล์ pom.xml ประกอบด้วย:
- องค์ประกอบหลักระบุพาเรนต์ของโมดูล
- พิกัดของโมดูลระบุไว้ในองค์ประกอบ artifactID ไม่ได้กล่าวถึง GroupID และเวอร์ชันเนื่องจากได้รับมาจากพิกัดหลัก
- การพึ่งพาอาศัยกัน หากโมดูลหนึ่งขึ้นอยู่กับอีกโมดูลหนึ่ง จะมีการกล่าวถึงในองค์ประกอบการพึ่งพา/การพึ่งพา
ดำเนินโครงการหลายโมดูล
$ mvn คำสั่ง clean package สามารถใช้เพื่อคอมไพล์ ทดสอบ และจัดแพ็คเกจ multi-module อย่างไรก็ตาม ในการรันด้วย maven-exec-plugin ต้องมีขั้นตอนต่อไปนี้:
รันคำสั่งต่อไปนี้:
$ cd simple-multi
$ mvn ติดตั้งใหม่ทั้งหมด
$ mvn exec:java -pl app -Dexec.mainClass=app.App
คำสั่ง install จะติดตั้งโมดูลลงในที่เก็บโลคัลของคุณ ซึ่งคุณสามารถรันโปรเจ็กต์ได้ แอพตัวเลือก -pl แจ้งปลั๊กอิน exec เกี่ยวกับโมดูลแอพและรันแอพคลาสของมัน หากไม่มีการติดตั้ง กระบวนการสร้างจะล้มเหลว เนื่องจาก Maven ไม่สามารถดาวน์โหลดและแก้ไขการพึ่งพาโมดูล util ได้
อย่างไรก็ตาม การติดตั้งโปรเจ็กต์ในที่เก็บในตัวเครื่องแต่ละครั้งก่อนรันแต่ละครั้งค่อนข้างยุ่งยาก โดยเฉพาะอย่างยิ่งเมื่ออยู่ในขั้นตอนการพัฒนา เพื่อความสะดวก คุณสามารถดำเนินการหลายโมดูลได้โดยตรงใน Eclipse IDE โดยไม่ต้องดำเนินการขั้นตอนการติดตั้ง
เรียนรู้ หลักสูตรการพัฒนาซอฟต์แวร์ออนไลน์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
บทสรุป
เราหวังว่าบทความนี้จะช่วยคุณในการเริ่มต้นกระบวนการ Maven Multi-Module เช่นเดียวกับสิ่งใหม่ ๆ มันแค่เกี่ยวกับการเริ่มต้นใช้งาน เมื่อคุณเข้าใจโครงสร้างพื้นฐานและการทำงานแล้ว คุณจะสามารถจัดการโมดูลต่างๆ ใน Maven ได้อย่างราบรื่น
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการพัฒนาซอฟต์แวร์แบบฟูลสแตก โปรดดูโปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์ – ความเชี่ยวชาญพิเศษด้านการพัฒนาแบบเต็มสแต็ก ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง 9 + โครงการและการมอบหมาย สถานะศิษย์เก่า IIIT-B โครงการหลักในทางปฏิบัติและความช่วยเหลือด้านงานกับ บริษัท ชั้นนำ
โครงการหลายโมดูลคืออะไร
หลายโมดูลช่วยให้คุณสามารถจัดกลุ่มสิ่งประดิษฐ์ทั่วไปเป็นโมดูลเดียวเพื่อลดจำนวนโมดูลที่จำเป็นในการสร้างและปรับใช้โครงการ โปรเจ็กต์หลายโมดูลสามารถสร้างได้จากสองโมดูลขึ้นไปโดยกำหนดความสัมพันธ์หลักและรองระหว่างโมดูลเหล่านี้ โมดูลหลักของโปรเจ็กต์หลายโมดูลเรียกว่าโมดูลรูท โมดูลย่อยของโปรเจ็กต์หลายโมดูลเรียกว่าโมดูลย่อย โมดูลรูทเป็นรากฐานที่สำคัญของบิลด์แบบหลายโมดูล ไม่สามารถสร้างโมดูลย่อยได้ด้วยตัวเอง แต่ต้องสร้างพร้อมกับโมดูลราก
ไฟล์โมเดลวัตถุโครงการใน maven คืออะไร?
ไฟล์ Project Object Model (POM) เป็นไฟล์ที่อธิบายโปรเจ็กต์ เป็นหน่วยพื้นฐานของงานที่นักพัฒนาเผยแพร่สิ่งประดิษฐ์ไปยังที่เก็บ โมเดลอ็อบเจ็กต์ของโปรเจ็กต์คือไฟล์ข้อความธรรมดาที่กำหนดโปรเจ็กต์ แสดงรายการส่วนประกอบ และกำหนดสิ่งที่พวกเขาทำ โมเดลอ็อบเจ็กต์ของโปรเจ็กต์เป็นองค์ประกอบสำคัญของเฟรมเวิร์กการจัดการโปรเจ็กต์ซอฟต์แวร์ Maven เป็นเอกสาร XML ชนิดพิเศษที่โปรเจ็กต์ Maven ประกอบด้วย ไฟล์ pom สามารถใช้เป็นคำอธิบายของโครงการได้ มันบอก Maven ว่าโปรเจ็กต์เกี่ยวกับอะไร รวมถึงคำอธิบายของแต่ละโมดูลในโครงการ การขึ้นต่อกัน และเวอร์ชัน โมดูลเป็นส่วนสำคัญของโครงการ Maven โมดูลและการพึ่งพาของพวกเขาถูกใช้เพื่อสร้างโครงการขั้นสุดท้าย
จะสร้างโปรเจ็กต์หลายโมดูล maven ได้อย่างไร?
ในการสร้างโปรเจ็กต์หลายโมดูล maven คุณต้องกำหนด parent pom และตรวจสอบให้แน่ใจว่าโมดูลย่อยทั้งหมดสืบทอดมา สิ่งสำคัญที่ควรทราบก็คือ คุณสามารถใส่โมดูลย่อยทั้งหมดไว้ในที่เก็บเดียวและชี้พาเรนต์ pom ไปที่นั้นได้ โปรเจ็กต์หลายโมดูล maven ประกอบด้วย parent pom และโมดูลย่อยตั้งแต่หนึ่งโมดูลขึ้นไป parent pom สามารถกำหนดข้อมูลเมตาโปรเจ็กต์ maven แบบหลายโมดูลได้ เช่น Artifact Id เวอร์ชัน การบรรจุ และการพึ่งพา โมดูลย่อยสามารถสืบทอดข้อมูลเมตาของพาเรนต์ และ parent pom สามารถกำหนดคอนฟิกูเรชันโปรเจ็กต์ระดับสูงได้ เช่น องค์กรของโปรเจ็กต์และคำอธิบาย