diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGenerator.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGenerator.java index c4929b54fe6d..fed1bc14e5f7 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGenerator.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGenerator.java @@ -1101,7 +1101,9 @@ protected void setupNativeImage(String imageName, OptionValues options, Map bb.registerTypeForBaseImage(cls)); - PreserveOptionsSupport.registerPreservedClasses(loader.classLoaderSupport); + if (loader.classLoaderSupport.isPreserveMode()) { + PreserveOptionsSupport.registerPreservedClasses(loader.classLoaderSupport); + } registerEntryPointStubs(entryPoints); } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java index 1e0eb80398b2..d303aa7d1f6d 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java @@ -150,7 +150,6 @@ public static void registerPreservedClasses(NativeImageClassLoaderSupport classL .toList(); final RuntimeReflectionSupport reflection = ImageSingletons.lookup(RuntimeReflectionSupport.class); - final RuntimeJNIAccessSupport jni = ImageSingletons.lookup(RuntimeJNIAccessSupport.class); final RuntimeProxyCreationSupport proxy = ImageSingletons.lookup(RuntimeProxyCreationSupport.class); final ConfigurationCondition always = ConfigurationCondition.alwaysTrue(); @@ -178,20 +177,29 @@ public static void registerPreservedClasses(NativeImageClassLoaderSupport classL proxy.addProxyClass(always, c); } - jni.register(ConfigurationCondition.alwaysTrue(), c); try { - for (Method declaredMethod : c.getDeclaredMethods()) { - jni.register(always, false, declaredMethod); - } - for (Constructor declaredConstructor : c.getDeclaredConstructors()) { - jni.register(always, false, declaredConstructor); - } for (Field declaredField : c.getDeclaredFields()) { - jni.register(always, false, declaredField); reflection.register(always, false, declaredField); } } catch (LinkageError e) { - /* If we can't link we can not register for JNI and reflection */ + /* If we can't link we can not register for reflection */ + } + if (SubstrateOptions.JNI.getValue()) { + final RuntimeJNIAccessSupport jni = ImageSingletons.lookup(RuntimeJNIAccessSupport.class); + jni.register(always, c); + try { + for (Method declaredMethod : c.getDeclaredMethods()) { + jni.register(always, false, declaredMethod); + } + for (Constructor declaredConstructor : c.getDeclaredConstructors()) { + jni.register(always, false, declaredConstructor); + } + for (Field declaredField : c.getDeclaredFields()) { + jni.register(always, false, declaredField); + } + } catch (LinkageError e) { + /* If we can't link we can not register for JNI and reflection */ + } } // if we register as unsafe allocated earlier there are build-time