7

在即将到来的 Java 9 中,有没有办法动态发现哪些模块可用?

例如:

  1. 使用一些模块路径运行一些应用程序
  2. 当应用程序运行时,在模块路径中添加更多模块(例如复制到模块目录中)
  3. 在应用程序中,查询“给我所有可用的模块”(可能使用过滤器,例如提供相同服务的替代实现的那些)

我不能从文档中完全看出。

4

2 回答 2

6

这取决于你愿意走多远……

默认情况下,模块系统对用户代码隐藏得很好,并且没有 API 告诉模块系统重新评估给定的命令行(例如--module-path--add-exports...)。所以直接的答案是“不,你不能通过修改模块路径来改变应用程序。”

但是,您可以做的是创建一个新层,其中包含一个全新的模块图。启动 JVM 时,它将根据命令行标志和模块路径内容创建一个单层。使用现有 API,您可以在该 API 之上创建新层。

要了解层,请查看模块系统的状态ModuleLayer和.

于 2017-06-05T20:04:52.907 回答
6

我认为不支持这种动态功能。目前,ModuleFinder.findAll() 的文档指出:

AModuleFinder提供了它所定位的模块的一致视图。如果findAll多次调用,那么每次都会返回相同(等于)的结果。

于 2017-06-02T20:23:25.837 回答