วัตถุประสงค์หลักของ Jigsaw Project คือนำเสนอแนวคิด modularity เพื่อสร้างโมดูลใน Java 9 และนำไปใช้กับ JDK เอง
ประโยชน์ของ Modularity (Jigsaw)
- Strong Encapsulation: โมดูลเข้าถึงได้เฉพาะส่วนที่ export อย่างชัดเจนใน module-info.java คลาส public ในแพ็กเกจที่ไม่ export ไม่ใช่ public จริงๆ
- Clear Dependencies: โมดูลต้องประกาศโมดูลอื่นที่ใช้ผ่าน requires clause โมดูลรวมกันเพื่อสร้าง runtime สั้นลง scale ได้ง่ายบนอุปกรณ์เล็ก
- Reliable: หลังกำจัด run-time errors แอปน่าเชื่อถือมากขึ้น เช่น ไม่มี ClassNotFoundException ขึ้นตอนรัน
JEPs (JDK Enhancement Proposals) ของ Project Jigsaw
| JEP | ชื่อ | คำอธิบาย |
|---|---|---|
| JEP 200 | The Modular JDK | ใช้ JPMS โมดูลาร์ไลซ์ JDK เป็นชุดโมดูล รวมกันที่ build/compile/runtime |
| JEP 201 | Modular Source Code | โมดูลาร์ไลซ์ source code JDK อัปเกรด build tools ให้คอมไพล์โมดูล |
| JEP 220 | Modular Run-Time Images | โครงสร้าง JRE/JDK runtime images ใหม่ รองรับโมดูล ปรับปรุง security, performance, maintainability |
| JEP 260 | Encapsulate Most Internal APIs | จำกัดการเข้าถึง internal APIs โดยตรงหรือผ่าน reflection บีบอัดไว้ในโมดูล |
| JEP 261 | Module System | implement module system spec เปลี่ยน JVM, Java language, standard APIs |
| JEP 282 | JLink: The Java Linker | รวมโมดูลและ dependencies เป็น runtime images ขนาดเล็ก |
โครงสร้าง JDK แบบ Modular
java.base (base module - ทุกโมดูลพึ่งพาอัตโนมัติ)
├── java.sql
├── java.logging
├── java.xml
├── java.desktop
├── java.management
├── java.naming
├── java.rmi
├── java.scripting
├── java.security.jgss
├── java.security.sasl
├── jdk.jshell
├── jdk.jlink
├── jdk.compiler
├── jdk.javadoc
└── ... (platform modules อื่นๆ)
Project Jigsaw เป็นการเปลี่ยนแปลงใหญ่ที่สุดของ Java 9 ทำให้ Java เหมาะกับ cloud, containers, microservices และ IoT