โมดูล (Module) เป็นชุดของโค้ดในรูปของคลาสที่จัดระเบียบอยู่ใน แพ็กเกจ (packages) และทรัพยากรคงที่ (static resources) เช่น property files เป็นต้น โมดูลให้ข้อมูลที่จำเป็นสำหรับสภาพแวดล้อมภายนอกในการใช้งานโมดูลนั้น Module Descriptor เป็นแหล่งสำคัญของระบบโมดูล เป็นรูปแบบคอมไพล์ของการประกาศโมดูลที่ระบุในไฟล์ชื่อ module-info.java ที่รูทของไดเรกทอรีโมดูล
ตัวอย่างการประกาศโมดูล
module com.myproject.module1 {
requires com.myproject.module2;
exports com.myproject.project1;
exports com.myproject.project2;
}
คำสั่งหลักใน Module Descriptor
- module module.name: ประกาศโมดูลชื่อ module.name
- requires module.name: ระบุว่าโมดูลนี้พึ่งพา module.name อนุญาตให้เข้าถึง public types ที่ export จากโมดูลเป้าหมาย
- requires transitive module.name: โมดูลที่พึ่งพาโมดูลนี้ จะพึ่งพา module.name อัตโนมัติ
- exports pkg.name: โมดูลนี้ export สมาชิก public ในแพ็กเกจ pkg.name ให้ทุกโมดูลที่ require โมดูลนี้
- exports pkg.name to module.name: เหมือนข้างต้น แต่จำกัดเฉพาะโมดูลที่ระบุเท่านั้น
- uses class.name: ทำให้โมดูลนี้เป็น consumer ของ service class.name
- provides class.name with class.name.impl: ลงทะเบียน class.name.impl เป็นการใช้งาน service class.name
- opens pkg.name: อนุญาตให้โมดูลอื่นใช้ reflection เข้าถึงสมาชิก private ของแพ็กเกจ pkg.name
- opens pkg.name to module.name: เหมือนข้างต้น แต่จำกัดโมดูลที่ได้ใช้ reflection
Module Descriptor เป็นหัวใจของระบบโมดูล ควบคุมการเข้าถึง ความพึ่งพา และการ encapsulate อย่างชัดเจน