java - 如何在 Java 9 中通过名称获取模块?

标签 java java-9 java-module

如何在Java 9中通过字符串名称获取java.lang.Module

例如,我们有

String name = "some.module";
Module module = //how to get here it?

最佳答案

在初始化后从引导层获取模块的一种方法是:

String moduleName = "my.module";
Module m = ModuleLayer.boot().findModule(moduleName).orElse(null);

虽然在我看来,最好是一种安全的方法,但获取一个模块将使用配置和系统ClassLoader来获取 ModuleLayer您的模块,然后 findModule 为:

Path path = Paths.get("/path/to/your/module");

ModuleFinder finder = ModuleFinder.of(path);
ModuleLayer parent = ModuleLayer.boot();

Configuration configuration = parent.configuration().resolve(finder, ModuleFinder.of(), Set.of(moduleName));
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();

ModuleLayer layer = parent.defineModulesWithOneLoader(configuration, systemClassLoader);
Module m = layer.findModule(moduleName).orElse(null);

关于java - 如何在 Java 9 中通过名称获取模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46287644/

相关文章:

java - 通过在 JComboBox 中进行选择将枚举值传递给函数

java - 从 JMenuBar 中删除/添加 JMenu

java - 如何创建 JTextField 数组?

java - 使用 Jlink 在一个平台上为另一个平台创建 Java 运行时镜像

java - 什么是非法反射访问?

java - 如何从 Maven 依赖项构建 java 9 依赖项

java - 无法转换为类 - 它们位于加载程序 'app' 的未命名模块中

java - 如何使用 Java 11 运行已编译的 Java 8 JavaFX 应用程序 jar?

java - 扫描仪和 JOptionPane 无法正常工作

java - 是什么阻止某人通过伪装成他们不是的模块来破坏合格的导出?