Authoritative definition of module dependencies, relationships and contents

Volker Simonis volker.simonis at
Tue Mar 28 13:33:06 UTC 2017

Hi Alan,

thanks for your quick response!

Your explanation definitely makes sense.
I've sent a follow up mail with the specification relevant parts of my
question to the java-se-9-spec-experts mailing list [1].



On Mon, Mar 27, 2017 at 10:56 PM, Alan Bateman <Alan.Bateman at> wrote:
> 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?
> Yes.
> -Alan

More information about the jigsaw-dev mailing list