Modularity, compilation, REPL, and more highlight the first major change to the Java Development Kit in more than three years.
The Holy Grail of Java 9 features, modularity—in the form of the Java Platform Module System—is intended to enable the JDK to be divided into a set of modules for combining at run, compile, or build time. Modularity has been called a “transitive” change, enabling understanding of dependencies across modules.
Modularity aspects of Java 9 include application packaging, modularizing the JDK itself, and reorganizing source code into modules. The build system will be enhanced to compile modules and enforce module boundaries at build time. JDK and Java Runtime Environment (JRE) images will be restructured to handle modules. Also, JavaFX UI controls and CSS APIs will be made accessible for modularity.
A host of configurations will be supported; scalability, security, and application performance should be improved. Easier scaling of Java down to small devices is a key driver of the modular effort. The Java Platform Module System, a component of Project Jigsaw, will be implemented.
With modularity, developers will be better able to construct and maintain libraries and large applications for both Java SE (Standard Edition) and EE (Enterprise Edition). But Oracle, IBM, Red Hat, and others have had disagreements over exactly how to make such a radical change in the platform. The module system itself was rejected in May, only to be approved on a second vote in June, after progress was made.
There remains controversy over whether modularity will do Java developers much good, with some experts saying yes and others saying no. Regardless, Oracle has pursued its efforts to modularize the platform.
Modularity already has delayed Java 9 on multiple occasions as Oracle has been trying to make migration to Java 9 easier, with a plan to allow illegal reflective access for code on the class path, used by the JRE to search for classes and resource files. This capability will be disallowed after Java 9.
Compilation in Java 9’s JDK