The need for a truly standard module system for the Java Platform has long been recognized. If anything that demand has grown in the years since Project Jigsaw was launched. This was clearly evident at the JCP Executive Committee meeting last October in Bonn, where the long-term convergence of the Java ME and Java SE platforms — and a module system that could support that goal — was a major topic of discussion.
One outcome of those discussions was an informal “modularity summit” organized by IBM and hosted by Oracle this past January in Ottawa. That meeting included key members of the OSGi, Eclipse, Java SE, and Java EE communities. Its primary goal was to reach a clear understanding of the requirements of a standard Java module system, and to do so without reference to any particular existing module system.
To that end I drafted an abstract module-system requirements document, presented it at the meeting, and then revised it in response to comments and suggestions made at that time and in subsequent discussions. This was by no means an easy process, but I think it’s fair to say that the end result represents the consensus view of all those involved even though a handful of requirements remain open.
I’ve posted the latest draft of the requirements document for wider review. Comments, to the jigsaw-dev list, are most welcome.
This is still a draft — I expect it to evolve in response to further comments, and also to expand to include a few more requirements from the Java ME and Java EE communities. This document will ultimately be one of the starting points for the eventual “Java Platform Module System” JSR that’s mentioned in the Java SE 8 Umbrella JSR.
The requirements document will, in parallel, guide a renewed effort on Project Jigsaw, which at its outset did not aim to define a standard module system. We’ve already prototyped some of the new requirements (e.g., modular JAR files), and work is well underway on some of the others. The overall Jigsaw design will, once it takes shape, be another of the starting points for the Module System JSR.