I have a module-info.java
file that looks like -
module foo.microservice {
requires spring.core;
requires spring.beans;
requires spring.context;
requires java.sql; // required for Spring Annotation based configuration :(
opens foo.microservice.configuration to spring.core;
opens foo.microservice.internal.services to spring.beans;
opens foo.microservice.internal.controllers to spring.beans;
exports foo.microservice.configuration;
exports foo.microservice.controllers;
exports foo.microservice.models;
exports foo.microservice.services;
}
I'm hoping that it might be possible to allow Spring to access all internal packages without explicitly adding each one to the module-info.java.
Is there a way to have a more generic opens
statement to allow all my internal packages (and sub-packages) to be accessible to spring.beans
?
You can use open module to open all packages (internal or not) to all modules. I don't think there's any intermediate granularity.
open module foo.microservice {
requires spring.core;
requires spring.beans;
requires spring.context;
requires java.sql; // required for Spring Annotation based configuration :(
exports foo.microservice.configuration;
exports foo.microservice.controllers;
exports foo.microservice.models;
exports foo.microservice.services;
}
(copied from Alexey Romanov's comment)
Currently no, as the JLS defines a module declaration as a list of directives where each directive has the below syntax:
ModuleDirective:
requires {RequiresModifier} ModuleName ;
exports PackageName [to ModuleName {, ModuleName}] ;
opens PackageName [to ModuleName {, ModuleName}] ;
uses TypeName ;
provides TypeName with TypeName {, TypeName} ;
The same syntax applies for both exports
and opens
: no wildcards are allowed in the package name. Maybe that could be improved in the future, but I think it would be a bad practice, similar to the bad practice of using such wildcards in import statements.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With