Moving toward a modular Java, Oracle is ushering in changes that have "significant impact" on both developers and users, including breaking IDEs, a high-ranking Oracle Java official said.
In a recent blog post entitled "Project Jigsaw: Modular Runtime Images," Oracle's Mark Reinhold, chief architect in the Java Platform Group, discussed changes made for modular runtime images integrated into Java and now available in JDK (Java Development Kit) 9 early access build 41. "This step, in contrast to the source code reorganization, will have significant impact on developers and end users."
Reinhold highlighted a list of changes, including removing the endorsed-standards override mechanism, for incorporating newer versions of standards developed outside the Java Community Process, as well as deleting the extension mechanism, for the Java Virtual Machine to use classes of an optional extension. "We're aware that these changes will break some applications, in particular IDEs and other development tools which rely upon the internal structure of the JDK," Reinhold said. "We think that the improvements to performance, security, and maintainability enabled by these changes are, however, more than worth it. We've already reached out to the maintainers of the major IDEs to make sure that they know about these changes, and we're ready to assist as necessary."
Asked about Java's changes impacting IDEs, Mike Milinkovich, executive director of the Eclipse Foundation, which produces the popular Eclipse IDE, said Eclipse was still formulating Java 9 plans. "However, this is obviously a major amount of work," said Milinkovich, "and we welcome contributions from Oracle and the community to ensure that Eclipse's support for Java 9 is rock solid."
Project Jigsaw modularity improvements were slated for inclusion in Java 8, which was released in March. But Jigsaw has been deferred until the release of Java 9. With modularization, applications can use only the modules they need, offering performance improvements and secure boundaries between components. The effort also is intended to make Java more scalable to smaller devices
Other changes prompted by modularization include JRE (Java SE Runtime Environment) and JDK images having identical structures. "Previously, a JDK image embedded the JRE in a jre subdirectory; now a JDK image is simply a runtime image that happens to contain the full set of development tools and other items historically found in the JDK," said Reinhold.
User-editable configuration files that were located in the lib directory now are in the new conf directory. Also, internal file rt.jar, tools.jar and dt.jar have been removed, with the content stored in a more efficient format in implementation-private files in the lib directory. A new built-in NIO file system provider can be used to access class and resource files stored in a run-time image. Tools previously reading rt.jar and other files directly need to be updated to this file system. The actual module system for Java, meanwhile, will be defined in Java Specification Request 376.