Как получить модуль по названию в Java 9?

Как получить java.lang.Module по имени строки в Java 9?

Например, у нас есть

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

1 ответ

Решение

Один из способов получить ваш модуль из загрузочного слоя, который состоит как минимум java.base после его инициализации есть:

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

хотя предпочтительно безопасный способ IMO, было бы получить модуль будет использовать Configuration и система 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);
Другие вопросы по тегам