การย้ายไปใช้มอดูล
มอดูลอัตโนมัติและมอดูลไม่มีชื่อ
การย้ายไปใช้มอดูล เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
การปรับโค้ดเดิมให้เป็นโมดูล
มีโครงการไม่กี่โครงการที่เริ่มใช้โมดูลตั้งแต่วันแรก JPMS ได้รับการออกแบบมาเพื่อ การย้ายแบบค่อยเป็นค่อยไป โดยอนุญาตให้คลาสพาธและพาธโมดูลอยู่ร่วมกันได้
แนวคิดสำคัญคือ โมดูลอัตโนมัติ และ โมดูลไร้ชื่อ
โมดูลไร้ชื่อ
ทุกสิ่งที่โหลดจากคลาสพาธจะอยู่ใน โมดูลไร้ชื่อ เพียงโมดูลเดียว โมดูลนี้อ่านโมดูลอื่นทั้งหมดและเปิดเผยแพ็กเกจทั้งหมดของตน
นี่คือสะพานที่ช่วยให้โค้ดเดิมบนคลาสพาธยังคงทำงานได้
โมดูลที่มีชื่ออ่านโมดูลไร้ชื่อไม่ได้
กฎสำคัญคือ โมดูลที่มีชื่อแบบระบุชัดจะพึ่งพาโมดูลไร้ชื่อไม่ได้ คุณไม่สามารถเขียน requires เพื่อใช้โค้ดบนคลาสพาธได้
ดังนั้นให้ย้ายจากล่างขึ้นบน โดยปรับรูปแบบการแทนโมดูลที่เป็นสิ่งพึ่งพาก่อน
โมดูลอัตโนมัติ
เมื่อนำ JAR ธรรมดา (ที่ไม่ใช่โมดูล) ไปไว้บน พาธโมดูล JAR นั้นจะกลายเป็น โมดูลอัตโนมัติ ระบบจะสร้างชื่อให้โดยอัตโนมัติ โมดูลนี้จะอ่านโมดูลอื่นทั้งหมดและเปิดเผยแพ็กเกจทั้งหมดของตน
วิธีนี้ทำให้โมดูลที่มีชื่อสามารถใช้ requires กับ JAR ที่ยังไม่มี module-info ได้
ชื่อมาจากที่ใด
ชื่อของโมดูลอัตโนมัติจะมาจากแหล่งต่าง ๆ ตามลำดับความสำคัญดังนี้:
- รายการ
Automatic-Module-Nameในตัวแสดงรายการของ JAR หากมี - หากไม่มี จะใช้ชื่อไฟล์ JAR โดยตัดเวอร์ชันออกและแทนยัติภังค์ด้วยจุด
ชื่อที่มั่นคงมีความสำคัญ
ผู้สร้างไลบรารีควรเพิ่ม Automatic-Module-Name ลงในตัวแสดงรายการก่อนที่จะปรับเป็นโมดูลอย่างสมบูรณ์ วิธีนี้รับรองชื่อโมดูลที่มั่นคง ทำให้ข้อกำหนด requires ของโมดูลที่ใช้งานต่อยังคงใช้ได้เมื่อมี module-info จริงในภายหลัง
Automatic-Module-Name: com.example.jsonกลยุทธ์จากบนลงล่าง
แนวทางที่แนะนำสำหรับแอปพลิเคชันของคุณมีดังนี้:
- คงสิ่งที่ต้องพึ่งพาไว้เป็นโมดูลอัตโนมัติบนพาธโมดูล
- เพิ่ม
module-info.javaให้โมดูลระดับบนสุดของคุณก่อน - ประกาศ
requiresโดยใช้ชื่อโมดูลอัตโนมัติเหล่านั้น
ขั้นตอนการย้ายตัวอย่าง
สมมติว่า guava-32.jar อยู่บนพาธโมดูลในฐานะโมดูลอัตโนมัติชื่อ com.google.common โมดูลแอปพลิเคชันของคุณสามารถระบุการพึ่งพาโมดูลนี้ได้แล้ว
module com.example.app {
requires com.google.common;
exports com.example.app.api;
}ปัญหาแพ็กเกจซ้ำกัน
ระบบโมดูลห้ามไม่ให้โมดูลสองโมดูลมี แพ็กเกจเดียวกัน ไลบรารีเดิมที่แบ่งแพ็กเกจเดียวกันไว้ในหลาย JAR จะทำให้เกิดข้อผิดพลาด
แก้ไขโดยรวม JAR เข้าด้วยกัน ใช้ --patch-module หรืออัปเกรดเป็นรุ่นที่แก้ปัญหาแพ็กเกจซ้ำกันแล้ว
ปัญหาการเข้าถึงด้วยการสะท้อนกลับ
เฟรมเวิร์กที่ทำการสะท้อนกลับเชิงลึกอาจล้มเหลวด้วย InaccessibleObjectException เมื่อคุณปรับโค้ดเป็นโมดูล ให้เพิ่มคำสั่ง opens หรือใช้แฟล็ก --add-opens สำหรับเริ่มทำงานเป็นทางเชื่อมชั่วคราว
เครื่องมือวิเคราะห์การพึ่งพาที่มีประโยชน์
เครื่องมือ jdeps จะวิเคราะห์ JAR ของคุณ รายงานการพึ่งพา ตรวจจับการใช้ส่วนเชื่อมต่อภายในของ JDK และยังสามารถสร้าง module-info.java ฉบับร่างด้วย jdeps --generate-module-info ได้อีกด้วย
ควรเรียกใช้เครื่องมือนี้ก่อนเพื่อวางแผนการย้าย
ตรวจสอบอย่างรวดเร็ว
ลองทบทวนว่า JAR ธรรมดาได้รับตัวตนของโมดูลอย่างไร
สรุปทบทวน
คุณได้เรียนรู้เทคนิคการย้ายดังนี้:
- โค้ดบนคลาสพาธอยู่ใน โมดูลไร้ชื่อ และโมดูลที่มีชื่อไม่สามารถใช้
requiresกับโมดูลนี้ได้ - JAR ธรรมดาบนพาธโมดูลจะกลายเป็น โมดูลอัตโนมัติ
- กำหนด
Automatic-Module-Nameเพื่อให้ได้ชื่อที่มั่นคง - ระวังแพ็กเกจซ้ำกันและการเข้าถึงด้วยการสะท้อนกลับ ใช้
jdepsเพื่อวางแผน
หลักสูตร JPMS จบลงเพียงเท่านี้
คำถามที่พบบ่อย
บทเรียน “การย้ายไปใช้มอดูล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การย้ายไปใช้มอดูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การย้ายไปใช้มอดูล”
มอดูลอัตโนมัติและมอดูลไม่มีชื่อ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การย้ายไปใช้มอดูล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- module-info.java
- requires และ exports
- บริการด้วย provides/uses
- การย้ายไปใช้มอดูล