From ec67ec8202b1ac9e504af1cb5d615c246a2c082f Mon Sep 17 00:00:00 2001 From: Vojin Jovanovic Date: Sun, 13 Jul 2025 09:04:58 +0200 Subject: [PATCH] Preserve all "optimized-out" JDK components --- .../hosted/image/PreserveOptionsSupport.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) 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 e84dab52ebf1..7f872e018116 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 @@ -25,15 +25,23 @@ package com.oracle.svm.hosted.image; import static com.oracle.graal.pointsto.api.PointstoOptions.UseConservativeUnsafeAccess; +import static com.oracle.svm.core.SubstrateOptions.EnableURLProtocols; import static com.oracle.svm.core.SubstrateOptions.Preserve; +import static com.oracle.svm.core.jdk.JRTSupport.Options.AllowJRTFileSystem; +import static com.oracle.svm.hosted.SecurityServicesFeature.Options.AdditionalSecurityProviders; +import static com.oracle.svm.hosted.jdk.localization.LocalizationFeature.Options.AddAllCharsets; +import static com.oracle.svm.hosted.jdk.localization.LocalizationFeature.Options.IncludeAllLocales; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.security.Provider; +import java.security.Security; import java.util.Arrays; import java.util.Comparator; import java.util.Set; +import java.util.StringJoiner; import java.util.stream.Stream; import org.graalvm.collections.EconomicMap; @@ -137,7 +145,23 @@ public static void parsePreserveOption(EconomicMap, Object> hostedV SubstrateOptionsParser.commandArgument(UseConservativeUnsafeAccess, "-")); } UseConservativeUnsafeAccess.update(hostedValues, true); + + AddAllCharsets.update(hostedValues, true); + IncludeAllLocales.update(hostedValues, true); + AllowJRTFileSystem.update(hostedValues, true); + EnableURLProtocols.update(hostedValues, "http,https,ftp,jar,file,mailto,jrt,jmod"); + AdditionalSecurityProviders.update(hostedValues, getSecurityProvidersCSV()); + } + } + + private static String getSecurityProvidersCSV() { + StringJoiner joiner = new StringJoiner(","); + for (Provider provider : Security.getProviders()) { + Class aClass = provider.getClass(); + String typeName = aClass.getTypeName(); + joiner.add(typeName); } + return joiner.toString(); } public static void registerPreservedClasses(NativeImageClassLoaderSupport classLoaderSupport) {