Module System เป็นฟีเจอร์ใหม่ใน Java 9 โมดูลคือ ชุดของแพ็กเกจ แบ่งเป็น 2 ประเภท: Exported packages (ใช้ภายนอกได้) และ Concealed packages (ใช้ได้เฉพาะภายในโมดูลเท่านั้น)
4 ประเภทของโมดูลใน Java 9
- Application Modules: โมดูลที่สร้างขึ้นเพื่อฟังก์ชันการทำงาน ทุก third-party dependencies อยู่ในกลุ่มนี้
- Automatic Modules: ไฟล์ JAR ที่วางบน module path โดยไม่มี module descriptor ได้รับการจัดเป็น automatic modules ประโยชน์หลักคือใช้ pre-Java 9 JARs ได้
- Unnamed Module: JAR หรือคลาสใดๆ บน classpath อยู่ใน unnamed module ไม่มีชื่อ จึงอ่านและ export โมดูลทั้งหมดได้
- Platform Modules: JDK ถูกเปลี่ยนโครงสร้างเป็นโมดูลาร์ เรียกว่า platform modules (เช่น java.base, java.sql, java.logging)
รูปแบบการประกาศโมดูล
module <Module-Name> {
requires moduleName;
exports packageName;
}
สรุปความแตกต่าง
| ประเภท | Module Descriptor | เข้าถึงโมดูลอื่น | ถูกเข้าถึงโดย |
|---|---|---|---|
| Application | มี (module-info.java) | ระบุด้วย requires | โมดูลที่ require นี้ |
| Automatic | ไม่มี (JAR ธรรมดา) | เข้าถึงทุกโมดูลได้ | ทุกโมดูล (export ทุกแพ็กเกจ) |
| Unnamed | ไม่มี (classpath) | เข้าถึงทุกโมดูลได้ | ไม่มี (ไม่มีชื่อ) |
| Platform | มี (ใน JDK) | ระบุด้วย requires | โมดูลที่ require นี้ |