Java 9 Support (#1991)

Supporting the Java 9 Language

We integrate ECJ version 4.7.2 from the download link below. Java 9 is fully supported since 4.7.1a (New and Noteworthy 4.7.1a)

We support a new LangLevel.JAVA9 and derive all compiler settings accordingly.

Unfortunately using Java 9 actually requires an updated Jetty version (Jetty9_4_support).

Supporting the Module System

Note: There will be no particular support for Java 9 modules in v2.6

The Java 9 module system provides for module level package exports and cross-module dependencies. As such it does not contradict the class loading delegation model but rather adds that dimension to the module system as Layers.

The module system has migration tools, such as the unnamed module (of the classloader) and automatic modules.

From a Z2 perspective it is almost a binary decision to either:

a) Automatically / semi-automatically modularize all Z2 modules by typically generated module-info data and declarations that support to add legacy modules are automatic modules, or
b) go for completely automatic modules by default.
c) Ignore the Java 9 module layer and stay with unnamed modules and the existing class loader separation

As the module system adds very little value to a Z2 modularized environment and it is currently not clear how forceful other frameworks will adapt module-info data, a first release may opt for c)