JDK9中是否有动态模块发现?

Joh*_*nst 7 java java-platform-module-system java-9

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

例如:

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

我不能从文档中说出来.

VGR*_*VGR 6

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

A ModuleFinder提供了它所找到的模块的一致视图.如果findAll多次调用,则每次返回相同(等于)的结果.


Nic*_*lai 6

这取决于你愿意去的长度......

默认情况下,该模块系统是从用户代码中隐藏得很好,没有API来告诉模块系统重新评估给定的命令行(例如--module-path,--add-exports...).所以立即回答是"不,你不能通过修改模块路径来改变应用程序."

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

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