From bbd6251bb2488f70b8c04dc4ee26d28c25306b6e Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Thu, 1 Sep 2022 13:07:08 +0800 Subject: [PATCH] Fixed bug with service providers under JPMS Modules that are service providers are not required by any other modules, this causes them to be ignored by `Configuration.resolve` and not included in the module layer --- .../main/java11/net/woggioni/envelope/MainRunner.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/launcher/src/main/java11/net/woggioni/envelope/MainRunner.java b/launcher/src/main/java11/net/woggioni/envelope/MainRunner.java index 125b041..c69de34 100644 --- a/launcher/src/main/java11/net/woggioni/envelope/MainRunner.java +++ b/launcher/src/main/java11/net/woggioni/envelope/MainRunner.java @@ -2,7 +2,9 @@ package net.woggioni.envelope; import java.util.Map; import java.util.TreeMap; +import java.util.stream.Collectors; import java.lang.module.Configuration; +import java.lang.module.ModuleDescriptor; import java.lang.module.ModuleFinder; import java.lang.module.ResolvedModule; import java.lang.module.ModuleReference; @@ -55,7 +57,14 @@ class MainRunner { ModuleLayer bootLayer = ModuleLayer.boot(); Configuration bootConfiguration = bootLayer.configuration(); JarFileModuleFinder jarFileModuleFinder = new JarFileModuleFinder(classpath); - Configuration cfg = bootConfiguration.resolve(jarFileModuleFinder, ModuleFinder.of(), Collections.singletonList(mainModuleName)); + List moduleNames = Collections.unmodifiableList( + jarFileModuleFinder.findAll() + .stream() + .map(ModuleReference::descriptor) + .map(ModuleDescriptor::name) + .collect(Collectors.toList()) + ); + Configuration cfg = bootConfiguration.resolve(jarFileModuleFinder, ModuleFinder.of(), moduleNames); Map packageMap = new TreeMap<>(); ModuleLayer.Controller controller = ModuleLayer.defineModules(cfg, Collections.singletonList(ModuleLayer.boot()), moduleName -> {