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 fou
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
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.