What are the predefined modules in JDK9 or Which module do I need to fix dependency problems?
Asked Answered
M

2

4

JDK9 will (probably) introduce a module system. As part of that, the Java Class Library will get modularized.

This can lead to exceptions when classes don't get found because they are in a module that isn't specified as a dependency yet.

What are the modules that will get created with the module system and what is their respective content?

Or stated differently: Given a class that doesn't get loaded, how do I find the proper module to include as a dependency?

Manouch answered 16/6, 2017 at 5:40 Comment(2)
jdeps --list-depsNary
I will note that you are asking multiple questions in the title, the first of which is off-topic (as per the tour), since it is a request for a list of things.Throng
R
5

how do I find the proper module to include as a dependency?

Consider this spoof class:

import java.sql.DriverManager;
import java.rmi.RemoteException;

public class UserDao {
    DriverManager driverManager = null;

    public void service() throws RemoteException {
        if (true) {
            throw new RemoteException();
        }
    }
}

Let's assume that this class is compiled into user-dao.jar. The jdeps tool is the answer (using 9ea170):

jdeps --list-deps user-dao.jar
   java.base
   java.rmi
   java.sql

(Note that jdeps shipped with JDK 8 but is much more appropriate in JDK 9.)

For completeness, if you know that the code uses a specific class (e.g. java.sql.DriverManager) and you suspect a module is required (e.g. java.sql), one could confirm the module via the doc, or on the command-line (again with 9ea170):

bash$ java --describe-module java.sql
java.sql@9-ea
exports java.sql
exports javax.sql
exports javax.transaction.xa
requires java.xml transitive
requires java.base mandated
requires java.logging transitive
uses java.sql.Driver
Retiarius answered 19/6, 2017 at 15:46 Comment(0)
M
2

The complete list of modules is available here. http://cr.openjdk.java.net/~mr/jigsaw/ea/module-summary.html

It lists 73 modules which will make up the Java Class Library. For each, there is a list of packages included and a list of other modules it depends on.

Given a class that doesn't get loaded one can search for the start of the package name on that site, in order to determine the module to depend on.

Manouch answered 16/6, 2017 at 5:41 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.