如何从Java 9模块中导出所有的包?

17

目前,对于我拥有的每个模块,我都需要明确指定我想要导出的软件包。例如:

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个回答

17

不能使用通配符来导出模块中的所有包,您需要显式地导出每个包。

这是不允许的,因为这可能会导致来自不同模块导出的不同包之间发生冲突,这违反了将代码模块化的目的。


此外,引用其中一个线程的话:

由模块导出的包应该是稳定的 API,消费者可以依赖它。出于这个原因,我们要求模块作者明确列出导出的包。这也降低了多个模块不必要地导出相同包的可能性。此外,它避免了在没有限定条件下导出 com.abs.*,而在有资格的情况下导出 com.abs.foo 时可能出现的混淆。


4
这对图书馆开发人员来说是一个大问题。 - elect
不起作用。给出 * 的语法错误,需要标识符 - user435421
1
我已经提出了一项编辑建议。 - user435421
1
整个拼图都是一个该死的错误,真是的。 - Enerccio
1
@Enerccio 确实,这让我头疼得像圣经一样。真是让我恶心透了。 - Remzi Cavdar
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接