如何从Java 9模块导出所有软件包?

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

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.*;
}

有什么办法可以做到这一点吗?这种限制从何而来?


答案 1

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

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


另外引用其中一个线程:

模块导出的包是消费者可以依赖的稳定 API。出于这个原因,我们让模块作者明确地拼写出导出的包。这也降低了多个模块不必要地导出同一包的可能性。此外,它避免了在无条件出口时无条件出口而随限定出口时可能发生的混淆。com.abs.*com.abs.foo


答案 2

推荐