Forum Stats

  • 3,837,918 Users
  • 2,262,309 Discussions
  • 7,900,432 Comments

Discussions

Root module resolution in jdk9

Rde1-Oracle
Rde1-Oracle Member Posts: 103 Employee
edited Sep 8, 2017 11:14AM in Java SE Early Access

I'm beginning to look at the JDK 9 impact on our source base.  I'm trying to understand if we need to use any --add-modules switches for our code.

One example class is com.sun.net.httpserver.HttpServer.  This is not in the default root module java.se, but is found at compile and runtime.  I assume that this is because of the rule defining that "Every non-java.* module on the upgrade module path or among the system modules that exports at least one package, without qualification, is also a root." (from JEP 261).

Now if I try using the class with --limit-modules, I get results I do not understand:

$ java --limit-modules=java.se com.sun.net.httpserver.HttpServer

Error: Could not find or load main class com.sun.net.httpserver.HttpServer

Caused by: java.lang.ClassNotFoundException: com.sun.net.httpserver.HttpServer

and

$ java --limit-modules=java.se.ee com.sun.net.httpserver.HttpServer

Error: Main method not found in class com.sun.net.httpserver.HttpServer, please define the main method as:

   public static void main(String[] args)

or a JavaFX application class must extend javafx.application.Application

If I run the latter with --show-module-resolution, I see:

bash-4.1$ /usr/java/jdk9/bin/java --limit-modules=java.se.ee --show-module-resolution com.sun.net.httpserver.HttpServer

root jdk.httpserver jrt:/jdk.httpserver

root java.se jrt:/java.se

root jdk.unsupported jrt:/jdk.unsupported

java.se requires java.datatransfer jrt:/java.datatransfer

java.se requires java.xml jrt:/java.xml

...

So my question is - what is different about the java.se.ee module that causes the extra root modules to be available?  I cannot see anything in the java.se.ee module-info which would cause this.

Thanks

Richard

Answers

  • Rde1-Oracle
    Rde1-Oracle Member Posts: 103 Employee
    edited Sep 8, 2017 11:14AM

    Well answering part of my question, I now understand that java.se.ee requires java.xml.ws which requires jdk.httpserver.  And this is reported as a root module because it is the class I am trying to execute?