module-info.java 'opens' 语句可以包含一个包和所有子包吗?
Can a module-info.java 'opens' statement include a package and all sub-packages?
我有一个 module-info.java
文件,看起来像 -
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;
}
我希望可以允许 Spring 访问所有内部包,而无需将每个包显式添加到模块中 -info.java.
是否有一种更通用的 opens
语句来允许 spring.beans
访问我所有的内部包(和子包)?
目前没有,因为 JLS defines a module declaration 作为指令列表,其中每个指令都具有以下语法:
ModuleDirective:
requires {RequiresModifier} ModuleName ;
exports PackageName [to ModuleName {, ModuleName}] ;
opens PackageName [to ModuleName {, ModuleName}] ;
uses TypeName ;
provides TypeName with TypeName {, TypeName} ;
相同的语法适用于 exports
和 opens
:包名称中不允许使用通配符。也许将来可以改进,但我认为这是一种不好的做法,类似于在 import 语句中使用这种通配符的坏做法。
您可以使用打开模块打开所有模块的所有包(内部或非内部)。我认为没有任何中间粒度。
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;
}
(从 Alexey Romanov 的评论中复制)
我有一个 module-info.java
文件,看起来像 -
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;
}
我希望可以允许 Spring 访问所有内部包,而无需将每个包显式添加到模块中 -info.java.
是否有一种更通用的 opens
语句来允许 spring.beans
访问我所有的内部包(和子包)?
目前没有,因为 JLS defines a module declaration 作为指令列表,其中每个指令都具有以下语法:
ModuleDirective:
requires {RequiresModifier} ModuleName ;
exports PackageName [to ModuleName {, ModuleName}] ;
opens PackageName [to ModuleName {, ModuleName}] ;
uses TypeName ;
provides TypeName with TypeName {, TypeName} ;
相同的语法适用于 exports
和 opens
:包名称中不允许使用通配符。也许将来可以改进,但我认为这是一种不好的做法,类似于在 import 语句中使用这种通配符的坏做法。
您可以使用打开模块打开所有模块的所有包(内部或非内部)。我认为没有任何中间粒度。
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;
}
(从 Alexey Romanov 的评论中复制)