java - 如何从 Java 9 模块导出所有包?

标签 java java-9 java-module java-platform-module-system

<分区>

现在,对于我拥有的每个模块,我都需要明确指定要导出的包。例如:

module core {
    exports cc.blynk.server.core;
    exports cc.blynk.server.core.protocol.handlers.decoders;
    exports cc.blynk.server.core.protocol.handlers.encoders;
}

不过,不是很方便。我想做这样的事情:

module core {
    exports cc.blynk.server.core.*;
}

有什么办法吗?这种限制从何而来?

最佳答案

不可以,您不能使用通配符导出模块中的所有包。您必须明确导出每个包。

这是不允许的,因为这可能主要导致从不同模块导出的不同包发生冲突,这违背了模块化代码的目的。


另外引用其中一个线程:

The packages exported by a module are meant to be a stable API that consumers can rely on. For this reason, we make the module author spell out the exported packages explicitly. This also dials down the likelihood of multiple modules needlessly exporting the same package. Additionally, it avoids the confusion that would occur if com.abs.* was exported without qualification while com.abs.foo was exported with qualification.

关于java - 如何从 Java 9 模块导出所有包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46502672/

相关文章:

java - MultiResourceItemReader - 如果标题无效则跳过整个文件

java-9 - 使用错误代码退出 jshell

Java 9.0 |类加载器::getResourceAsStream: NullPointerException

java - JDK 10 模块和 sun.security.provider.certpath.SunCertPathBuilderException

java - Twitter4j 获取推文的 JSON 格式

java - 无法解决错误 [java.lang.IllegalStateException : No WebApplicationContext found: no ContextLoaderListener registered? ]

c# - 如何公开 Amazon EC2 实例的进程状态

windows - 如何使用 javapackager 生成模块化 Java 应用程序的可执行文件?

当位于两个目录之一时,Gradle 无法解析 java 11 模块的包

java - 在 Java11 模块中使用 @PostConstruct 或 @PreDestroy