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

时间:2017-06-02 19:06:56

标签: java java-9 jigsaw

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

E.g:

  1. 使用某些模块路径运行某些应用
  2. 在应用程序运行时,将更多模块添加到模块路径中(例如,复制到模块目录中)
  3. 在应用内,查询“给我所有可用的模块”(可能带有过滤器,例如那些提供同一服务的替代实现的过滤器)
  4. 我无法从文档中说出来。

2 个答案:

答案 0 :(得分:6)

我认为不支持这种动态功能。目前,documentation of ModuleFinder.findAll()州:

  

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

答案 1 :(得分:6)

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

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

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

要了解图层,请查看The State of the Module Systemthe Javadoc for ModuleLayer