在即将到来的 Java 9 中,有没有办法动态发现哪些模块可用?
例如:
- 使用一些模块路径运行一些应用程序
- 当应用程序运行时,在模块路径中添加更多模块(例如复制到模块目录中)
- 在应用程序中,查询“给我所有可用的模块”(可能使用过滤器,例如提供相同服务的替代实现的那些)
我不能从文档中完全看出。
在即将到来的 Java 9 中,有没有办法动态发现哪些模块可用?
例如:
我不能从文档中完全看出。
这取决于你愿意走多远……
默认情况下,模块系统对用户代码隐藏得很好,并且没有 API 告诉模块系统重新评估给定的命令行(例如--module-path
,--add-exports
...)。所以直接的答案是“不,你不能通过修改模块路径来改变应用程序。”
但是,您可以做的是创建一个新层,其中包含一个全新的模块图。启动 JVM 时,它将根据命令行标志和模块路径内容创建一个单层。使用现有 API,您可以在该 API 之上创建新层。
要了解层,请查看模块系统的状态ModuleLayer
和.
我认为不支持这种动态功能。目前,ModuleFinder.findAll() 的文档指出:
A
ModuleFinder
提供了它所定位的模块的一致视图。如果findAll
多次调用,那么每次都会返回相同(等于)的结果。