On 12/18/2015 04:49 PM, Peter Levart wrote:
You can check whether the optional module is included in a runtime configuration or not with a simple Class.forName() check even if you don't depend on the module (i.e. don't list it in "requires" descriptor at runtime). The visibility of classes is not restricted. It only depends on ClassLoader hierarchy. When you successfully resolve some optional class at runtime (with Class.forName), you then have to add a read edge to it's module:

    Class<?> optionalClass = Class.forName("...");
    MySelfClass.getModule().addRead(optionalClass.getModule());

...before invoking any code that uses this module.

Just had an idea!

Optional dependency at runtime could add a read edge to the module if that module was included in the configuration, but would otherwise not cause that module to be included in the configuration by itself. How does that sound? Spring would work as before - no .addRead() calls needed. Just Class.forName("OptionalClass").

Regards, Peter

Reply via email to