[javaee-spec users] [jsr366-experts] Java EE APIs hidden by default in JDK 1.9 and removed in JDK 1.10

From: Bill Shannon <>
Date: Wed, 21 Sep 2016 13:11:26 -0700

As described in JEP 261: Module System [1], all Java EE APIs are
hidden by default for code on the class path. A Java EE application
server will need to provide its own versions of these APIs, or will
need to add a --add-modules option to its invocation to expose
these modules from the JDK. This is just one of the many issues
Java EE application servers will need to address when running on
JDK 1.9.

More concerning is the impact on Java SE applications that make
use of these APIs. Running even a simple program that uses (e.g.)
JAXB on JDK 1.9 will fail. The "java" command invocation for such
an application will need to be modified to include the --add-modules
option, but that option can not be used when running on JDK 1.8.

Alternatively, the jar files for the required Java EE APIs can be
included in the class path for the application, allowing the
application to run on JDK 1.9. But if run on JDK 1.8, these jar
files will be ignored and the versions included in the JDK will be
used instead.

There is no compatible way to write a Java SE application that works
on both JDK 1.8 and JDK 1.9 and that uses Java EE APIs such that:

1. it uses the Java SE versions of these APIs, or
2. it uses versions of these APIs packaged with the application

Existing Java SE applications that use these APIs will not run unmodified
on JDK 1.9.

In addition, it is expected that these APIs will be removed from
Java SE 10 and their implementations will be removed completely from
JDK 1.10, as described in the pruning process [2].

If you have concerns about any of this, please let me know, and/or provide
your feedback on hiding these APIs in JDK 1.9 to the mailing list for the
Java platform module system specification [3] and your feedback on pruning
these APIs to the Java SE 9 (JSR 379) expert group [4].