A โมดูล เป็นคอนเทนเนอร์ของแพ็คเกจและแต่ละโมดูลมีตัวอธิบายโมดูลที่มี โมดูล ชื่อ , โมดูล การพึ่งพา หมายความว่าชื่อของโมดูลอื่นขึ้นอยู่กับและชื่อของแพ็คเกจที่ส่งออกซึ่งสามารถใช้ได้เฉพาะโดยโมดูลที่ขึ้นอยู่กับโมดูลเท่านั้น
module com.tutorialspoint.app { /** Modules upon which the module com.tutorialspoint.app depends on */ requires com.tutorialspoint.services; /** Packages exposed by this module which can be used by other modules */ exports com.tutorialspoint.app.util; }
มีโหมดการคอมไพล์ที่แตกต่างกันสามโหมดโดยโมดูล Java 9:โหมดดั้งเดิม โหมดโมดูลเดียว และโหมดหลายโมดูล
โหมดการรวบรวมของโมดูล:
- โหมดเดิม :สามารถเปิดใช้งานได้เมื่อสภาพแวดล้อมการคอมไพล์กำหนดโดย --source , --เป้าหมาย, และ --ปล่อย ตัวเลือกน้อยกว่าหรือเท่ากับ 8 . คอมไพเลอร์ทำงานในลักษณะเดียวกับที่ทำใน Java 8 (หรือก่อนหน้านี้) ที่เราสามารถใช้ตัวเลือกดั้งเดิม (classpath ฯลฯ) แทนที่จะเป็นตัวเลือกที่เกี่ยวข้องกับโมดูล (--module-path ). ในโหมดนี้ รหัสของเราทำงานเป็น ไม่มีชื่อ โมดูล ระหว่างรันไทม์
- โหมดโมดูลเดียว :สามารถเปิดใช้งานได้เมื่อสภาพแวดล้อมการคอมไพล์เป็น 9 หรือใหม่กว่าและ --module-source-path ไม่ได้ใช้ตัวเลือก ในโหมดนี้ โค้ดมีโครงสร้างในแผนผังไดเร็กทอรีแบบลำดับชั้นของแพ็คเกจดั้งเดิม โค้ดมี module-info.java ไฟล์และรันบน modulepath มากกว่าบน classpath ในโครงสร้างนี้ เราสามารถวางไฟล์ module-info.java ไว้ใต้ไดเร็กทอรี src ได้โดยตรง เราไม่สามารถมีไฟล์ module-info.java หลายไฟล์ในแผนผังไดเร็กทอรีเดียวกันได้ จึงเรียกว่า ไฟล์เดียว โมดูล โหมด .
- โหมดหลายโมดูล :สามารถเปิดใช้งานได้เมื่อสภาพแวดล้อมการคอมไพล์เป็น 9 หรือใหม่กว่าและ --module-source-path ใช้ตัวเลือก ในโหมดนี้ เราวางโมดูลหลายโมดูลไว้ใต้ไดเร็กทอรีต้นทางเดียวกัน ระหว่างเวลาคอมไพล์ ไดเร็กทอรีต้นทางหลักสามารถระบุได้ด้วย --module-source-path ตัวเลือก. โครงสร้างต้นทางสำหรับแต่ละโมดูลสามารถวางในไดเร็กทอรีย่อยของตนเองภายใต้ไดเร็กทอรีซอร์สหลัก