Authoritative definition of module dependencies, relationships and contents

Alan Bateman Alan.Bateman at
Mon Mar 27 20:56:08 UTC 2017

On 27/03/2017 19:34, Volker Simonis wrote:

> Where can I find the authoritative definition of the Java SE 9 module
> dependencies and relationships?
JSR 379 / Java SE 9 isn't final yet so I think you'll have to use 
material in the public review in the mean-time.

> When I'm looking at the "Modular platform" [1] section of the "Java SE
> 9 Public Review Specification", I can see the "module graph". Its
> module dependencies seem to correspond to the Java 9 API documentation
> [2]. For the "java.desktop" package for example, both define
> "java.datatransfer" and "java.xml" as its transitive dependencies.
> However when I'm looking at the source code [3], I can see that
> "java.desktop" also requires "java.prefs" (non-transitively). Why is
> this dependency not recorded in the module graph and the API
> documentation?
It's an implementation dependency. It doesn't influence the API that is 
exposed when you require the java.desktop module.

> For "java.corba" it seems even more confusing. The API documentation
> list "java.desktop" and "java.rmi" as transitively required, but also
> explicitly "java.datatransfer" and "java.xml" as "additionally
> required" modules, although they are implicitly reachable trough
> "java.desktop" anyway. On the other hand, the module-info of
> "java.corba" [5] only lists "java.desktop" and "java.rmi" as
> transitively required but not "java.datatransfer" and "java.xml".
> Additionally "java.logging", "java.naming" and "java.transaction" are
> required non-transitively (but these requirements are not recorded,
> neither in the module graph nor in the API documentation).
org.omg.CORBA.ORB.init(Applet, Properties) is the reason why java.corba 
has to `requires transitive java.desktop`.

RMI-IIOP is part of the java.corba module and types from java.rmi are 
exposed in the API, this is why it `requires transitive java.rmi`.

The others are implementation dependences. The exception is the 
dependency on java.transaction which requires digging into the Java 
Language to IDL Mapping specification and the table that maps CORBA 
system exceptions to RMI exceptions.

> :
> 3. Is it acceptable for an "independent implementation" to add
> additional "requires" and/or "requires transitive" edges from a
> standard module to another standard module?
I assume this will be covered by the documentation for certifying a Java 
SE 9 implementation.

However just to say that if you change module M to `requires transitive 
X` then you expose the X API to whoever requires M. So I expect 
`requires transitive` (or "implied readability" as it is termed) will 
feature in the module graph equivalent of the signature test.

> 4. Were can I find the authoritative package to module mapping
> mandated by the Java SE 9 standard? Is this just the current Java 9
> API documentation?


More information about the jigsaw-dev mailing list