如何在JPMS中使用动态创建的图层进行"--add-modules"?



我以这种方式创建JPMS层:

Configuration cf = parentLayer.configuration().resolveAndBind(moduleFinder, ModuleFinder.of(), moduleNames);
ModuleLayer layer = parentLayer.defineModulesWithOneLoader(cf, parentClassLoader);

我在添加实现模块时遇到了问题。这些实现模块被JPMS忽略,因为这些模块中的类在任何地方都没有使用(很明显,API模块中的类都被使用(。所以,JPMS并没有将这些模块添加到层中。

据我所知,如果我谈到引导层上的实现模块,我可以使用--add-modulesjvm参数。然而,我找不到任何关于如何强制JPMS为动态创建的层加载我的模块(即使没有使用它的类(的信息。

有人能说怎么做吗?

--add-modules的作用是将给定的模块添加到根模块集。

配置#resolveAndBind允许您使用最后一个参数指定根模块。您需要确保要加载的模块包含在这些根模块中。

要使用您想要创建的层中所有可能的模块,您可以使用以下内容:

Set<String> moduleNames = moduleFinder.findAll()
.stream()
.map(ModuleReference::descriptor)
.map(ModuleDescriptor::name)
.collect(Collectors.toUnmodifiableSet());
Configuration cf = parentLayer.configuration().resolveAndBind(moduleFinder, ModuleFinder.of(), moduleNames)