ZhekaKozlov
ZhekaKozlov

Reputation: 39536

Are cycles allowed between platform modules?

This is the module declaration of the java.rmi module:

module java.rmi {
    requires java.base;
    requires java.logging;

    exports java.rmi.activation;
    exports com.sun.rmi.rmid to java.base; // <-- cycle
    ...
}

So, there is a cyclic dependency between java.rmi and java.base, right? Are cycles allowed between platform modules?

Upvotes: 11

Views: 258

Answers (1)

Nicolai Parlog
Nicolai Parlog

Reputation: 51060

The module system forbids statically declaring cycles with requires clauses. This is true for platform and application modules and the example you give does not violate that rule.

Requires clauses are just one source for readability edges in the module graph, though. Others are command line flags, reflection, requires transitive, and I'm sure there are more. Adding all these may result in cycles in the module graph and that is not forbidden.

In your concrete example the cycle is only created once java.base reads java.rmi, which could happen if it uses reflection on classes in com.sun.rmi.rmid.

Upvotes: 10

Related Questions