JPMS Module System (Java 9+ module-info.java)
1Concept
The Java Platform Module System (JPMS) introduced strong encapsulation and reliable configuration. Modules declare dependencies explicitly via `requires` and export packages via `exports` in a `module-info.java` file. Internal packages cannot be accessed even via reflection unless explicitly opened via `opens`.
2Architecture Diagram
module com.enterprise.billing {
requires java.sql; // Explicit dependency
requires transitive java.logging; // Transitive dependency
exports com.enterprise.billing.api; // Publicly visible API
// Internal packages hidden!
}3Code Example
Core Java
// Simulated module descriptor demonstration:
public class ModuleSystemDemo {
public static void main(String[] args) {
Module currentModule = ModuleSystemDemo.class.getModule();
System.out.println("Current Module Name: " + (currentModule.isNamed() ? currentModule.getName() : "Unnamed Module"));
System.out.println("Module ClassLoader: " + currentModule.getClassLoader());
System.out.println("Java Base Module: " + Object.class.getModule().getName());
}
}4Expected Output
Current Module Name: Unnamed Module Module ClassLoader: jdk.internal.loader.ClassLoaders$AppClassLoader Java Base Module: java.base
5Key Takeaways
- ✓`java.base` module is required automatically by all Java modules.
- ✓`exports` makes packages public at compile-time and runtime.
- ✓`opens` permits deep reflection access (required by frameworks like Spring / Hibernate).