我这样创建JPMS层:
Configuration cf = parentLayer.configuration().resolveAndBind(moduleFinder, ModuleFinder.of(), moduleNames);
ModuleLayer layer = parentLayer.defineModulesWithOneLoader(cf, parentClassLoader);我在添加实现模块时遇到了一个问题。这些实现模块被JPMS忽略,因为这些模块中的类没有在任何地方使用(很明显,使用的是API模块中的类)。因此,JPMS不会将这些模块添加到层中。
据我所知,如果我谈到引导层上的实现模块,我可以使用--add-modules jvm参数。但是,我找不到任何信息来强制JPMS为动态创建的层加载我的模块(即使没有使用它的类)。
有谁能告诉我怎么做吗?
发布于 2021-08-28 12:12:52
--add-modules的作用是将给定的模块添加到根模块集中。
Configuration#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)https://stackoverflow.com/questions/64848515
复制相似问题