From bf2a933279cbdbd1f12ce36bc59de3a1d7c9e4cf Mon Sep 17 00:00:00 2001 From: Doug Simon Date: Wed, 7 Jul 2021 09:50:44 +0200 Subject: [PATCH 1/2] Make NativeImageClassLoaderSupport#initAllClasses take jdk.module.upgrade.path into account --- .../hosted/NativeImageClassLoaderSupport.java | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/substratevm/src/com.oracle.svm.hosted.jdk11/src/com/oracle/svm/hosted/NativeImageClassLoaderSupport.java b/substratevm/src/com.oracle.svm.hosted.jdk11/src/com/oracle/svm/hosted/NativeImageClassLoaderSupport.java index 218f14afd9be..87205a07b941 100644 --- a/substratevm/src/com.oracle.svm.hosted.jdk11/src/com/oracle/svm/hosted/NativeImageClassLoaderSupport.java +++ b/substratevm/src/com.oracle.svm.hosted.jdk11/src/com/oracle/svm/hosted/NativeImageClassLoaderSupport.java @@ -248,6 +248,41 @@ public ClassLoader getClassLoader() { return classLoader; } + private static ModuleFinder upgradeAndSystemModuleFinder; + + /** + * Creates a finder from a module path specified by the {@code prop} system property. + */ + private static ModuleFinder finderFor(String prop) { + String s = System.getProperty(prop); + if (s == null || s.isEmpty()) { + return null; + } else { + String[] dirs = s.split(File.pathSeparator); + Path[] paths = new Path[dirs.length]; + int i = 0; + for (String dir : dirs) { + paths[i++] = Path.of(dir); + } + return ModuleFinder.of(paths); + } + } + + /** + * Gets a finder that locates the upgrade modules and the system modules, in that order. + */ + private static ModuleFinder getUpgradeAndSystemModuleFinder() { + if (upgradeAndSystemModuleFinder == null) { + ModuleFinder finder = ModuleFinder.ofSystem(); + ModuleFinder upgradeModulePath = finderFor("jdk.module.upgrade.path"); + if (upgradeModulePath != null) { + finder = ModuleFinder.compose(upgradeModulePath, finder); + } + upgradeAndSystemModuleFinder = finder; + } + return upgradeAndSystemModuleFinder; + } + private class ClassInitWithModules extends ClassInit { ClassInitWithModules(ForkJoinPool executor, ImageClassLoader imageClassLoader) { @@ -260,7 +295,7 @@ protected void init() { "jdk.internal.vm.ci", "jdk.internal.vm.compiler", "com.oracle.graal.graal_enterprise", "org.graalvm.sdk", "org.graalvm.truffle"); - for (ModuleReference moduleReference : ModuleFinder.ofSystem().findAll()) { + for (ModuleReference moduleReference : getUpgradeAndSystemModuleFinder().findAll()) { if (requiresInit.contains(moduleReference.descriptor().name())) { initModule(moduleReference); } From 1b482bab3ed7d1b0ab61c9be75e5246096cfeea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20W=C3=B6gerer?= Date: Wed, 7 Jul 2021 15:30:31 +0200 Subject: [PATCH 2/2] Run gate-svm-style-fullbuild with MX_BUILD_EXPLODED=true --- substratevm/ci_includes/gate.hocon | 1 + 1 file changed, 1 insertion(+) diff --git a/substratevm/ci_includes/gate.hocon b/substratevm/ci_includes/gate.hocon index f29b5d7887bc..0bbcd7b758a2 100644 --- a/substratevm/ci_includes/gate.hocon +++ b/substratevm/ci_includes/gate.hocon @@ -57,6 +57,7 @@ builds += [ timelimit: "45:00" environment : { MAVEN_REPO_LOCAL : "$BUILD_DIR/.m2" + MX_BUILD_EXPLODED : "true" } run: [ ${svm-cmd-gate} ["style,fullbuild,helloworld,test,svmjunit,maven"]