Code review comment: True. Maybe we need some more methods :)

Code under review:
public NativeImageInvokerInfo build() {
                List<String> nativeImageArgs = new ArrayList<>();
                boolean enableSslNative = false;
                boolean inlineBeforeAnalysis = nativeConfig.inlineBeforeAnalysis;
                boolean addAllCharsets = nativeConfig.addAllCharsets;
                boolean enableHttpsUrlHandler = nativeConfig.enableHttpsUrlHandler;
                for (NativeImageSystemPropertyBuildItem prop : nativeImageProperties) {
                    
                    if (prop.getKey().equals("quarkus.ssl.native") && prop.getValue() != null) {
                        enableSslNative = Boolean.parseBoolean(prop.getValue());
                    } else if (prop.getKey().equals("quarkus.jni.enable") && prop.getValue().equals("false")) {
                        log.warn("Your application is setting the deprecated 'quarkus.jni.enable' configuration key to false."
                                + " Please consider removing this configuration key as it is ignored (JNI is always enabled) and it"
                                + " will be removed in a future Quarkus version.");
                    } else if (prop.getKey().equals("quarkus.native.enable-all-security-services") && prop.getValue() != null) {
                        log.warn(
                                "Your application is setting the deprecated 'quarkus.native.enable-all-security-services' configuration key."
                                        + " Please consider removing this configuration key as it is ignored and it"
                                        + " will be removed in a future Quarkus version.");
                    } else if (prop.getKey().equals("quarkus.native.enable-all-charsets") && prop.getValue() != null) {
                        addAllCharsets |= Boolean.parseBoolean(prop.getValue());
                    } else if (prop.getKey().equals("quarkus.native.inline-before-analysis") && prop.getValue() != null) {
                        inlineBeforeAnalysis = Boolean.parseBoolean(prop.getValue());
                    } else {
                        
                        if (prop.getValue() == null) {
                            nativeImageArgs.add("-J-D" + prop.getKey());
                        } else {
                            nativeImageArgs.add("-J-D" + prop.getKey() + "=" + prop.getValue());
                        }
                    }
                }

                final String userLanguage = LocaleProcessor.nativeImageUserLanguage(nativeConfig, localesBuildTimeConfig);
                if (!userLanguage.isEmpty()) {
                    nativeImageArgs.add("-J-Duser.language=" + userLanguage);
                }
                final String userCountry = LocaleProcessor.nativeImageUserCountry(nativeConfig, localesBuildTimeConfig);
                if (!userCountry.isEmpty()) {
                    nativeImageArgs.add("-J-Duser.country=" + userCountry);
                }
                final String includeLocales = LocaleProcessor.nativeImageIncludeLocales(nativeConfig, localesBuildTimeConfig);
                if (!includeLocales.isEmpty()) {
                    nativeImageArgs.add("-H:IncludeLocales=" + includeLocales);
                }

                nativeImageArgs.add("-J-Dfile.encoding=" + nativeConfig.fileEncoding);

                if (enableSslNative) {
                    enableHttpsUrlHandler = true;
                }

                if (nativeImageFeatures == null || nativeImageFeatures.isEmpty()) {
                    throw new IllegalStateException("GraalVM features can't be empty, quarkus core is using some.");
                }
                List<String> featuresList = new ArrayList<>(nativeImageFeatures.size());
                for (NativeImageFeatureBuildItem nativeImageFeature : nativeImageFeatures) {
                    featuresList.add(nativeImageFeature.getQualifiedName());
                }
                nativeImageArgs.add("--features=" + String.join(",", featuresList));

                /*
                 * Instruct GraalVM / Mandrel parse compiler graphs twice, once for the static analysis and once again
                 * for the AOT compilation.
                 *
                 * We do this because single parsing significantly increases memory usage at build time
                 * see https:
                 * https:
                 *
                 * Note: This option must come before the invocation of
                 * {@code handleAdditionalProperties(nativeImageArgs)} to ensure that devs and advanced users can
                 * override it by passing -Dquarkus.native.additional-build-args=-H:+ParseOnce
                 */
                nativeImageArgs.add("-H:-ParseOnce");

                /**
                 * This makes sure the Kerberos integration module is made available in case any library
                 * refers to it (e.g. the PostgreSQL JDBC requires it, seems plausible that many others will as well):
                 * the module is not available by default on Java 17.
                 * No flag was introduced as this merely exposes the visibility of the module, it doesn't
                 * control its actual inclusion which will depend on the usual analysis.
                 */
                nativeImageArgs.add("-J--add-exports=java.security.jgss/sun.security.krb5=ALL-UNNAMED");

                
                nativeImageArgs.add("-J--add-opens=java.base/java.text=ALL-UNNAMED");

                if (nativeConfig.enableReports) {
                    if (graalVMVersion.isOlderThan(GraalVM.Version.VERSION_21_3_2)) {
                        nativeImageArgs.add("-H:+PrintAnalysisCallTree");
                    } else {
                        nativeImageArgs.add("-H:PrintAnalysisCallTreeType=CSV");
                    }
                }

                
                if (graalVMVersion.compareTo(GraalVM.Version.VERSION_22_3_0) >= 0) {
                    
                    nativeImageArgs.add("-H:+CollectImageBuildStatistics");
                    nativeImageArgs.add("-H:ImageBuildStatisticsFile=" + nativeImageName + "-timing-stats.json");
                    
                    nativeImageArgs.add("-H:BuildOutputJSONFile=" + nativeImageName + "-build-output-stats.json");
                }

                /*
                 * Any parameters following this call are forced over the user provided parameters in
                 * quarkus.native.additional-build-args. So if you need a parameter to be overridable through
                 * quarkus.native.additional-build-args please make sure to add it before this call.
                 */
                handleAdditionalProperties(nativeImageArgs);

                nativeImageArgs.add(
                        "-H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime"); 
                nativeImageArgs.add("-H:+JNI");
                nativeImageArgs.add("-H:+AllowFoldMethods");

                if (nativeConfig.headless) {
                    nativeImageArgs.add("-J-Djava.awt.headless=true");
                }

                if (nativeConfig.enableFallbackImages) {
                    nativeImageArgs.add("-H:FallbackThreshold=5");
                } else {
                    
                    
                    nativeImageArgs.add("-H:FallbackThreshold=0");
                }

                
                
                if (graalVMVersion.isNewerThan(GraalVM.Version.VERSION_22_0_0_2) && !classpathIsBroken) {
                    nativeImageArgs.add("--link-at-build-time");
                } else if (!graalVMVersion.isNewerThan(GraalVM.Version.VERSION_22_0_0_2) && classpathIsBroken) {
                    nativeImageArgs.add("--allow-incomplete-classpath");
                }

                if (nativeConfig.reportErrorsAtRuntime) {
                    nativeImageArgs.add("-H:+ReportUnsupportedElementsAtRuntime");
                }
                if (nativeConfig.reportExceptionStackTraces) {
                    nativeImageArgs.add("-H:+ReportExceptionStackTraces");
                }
                if (nativeConfig.debug.enabled) {
                    nativeImageArgs.add("-g");
                    nativeImageArgs.add("-H:DebugInfoSourceSearchPath=" + APP_SOURCES);
                }
                if (nativeConfig.debugBuildProcess) {
                    String debugBuildProcessHost;
                    if (nativeConfig.isContainerBuild()) {
                        debugBuildProcessHost = "0.0.0.0";
                    } else {
                        debugBuildProcessHost = "localhost";
                    }
                    nativeImageArgs
                            .add("-J-Xrunjdwp:transport=dt_socket,address=" + debugBuildProcessHost + ":"
                                    + DEBUG_BUILD_PROCESS_PORT + ",server=y,suspend=y");
                }
                if (nativeConfig.dumpProxies) {
                    nativeImageArgs.add("-Dsun.misc.ProxyGenerator.saveGeneratedFiles=true");
                }
                if (nativeConfig.nativeImageXmx.isPresent()) {
                    nativeImageArgs.add("-J-Xmx" + nativeConfig.nativeImageXmx.get());
                }
                List<String> protocols = new ArrayList<>(2);
                if (nativeConfig.enableHttpUrlHandler) {
                    protocols.add("http");
                }
                if (enableHttpsUrlHandler) {
                    protocols.add("https");
                }
                if (addAllCharsets) {
                    nativeImageArgs.add("-H:+AddAllCharsets");
                } else {
                    nativeImageArgs.add("-H:-AddAllCharsets");
                }
                if (!protocols.isEmpty()) {
                    nativeImageArgs.add("-H:EnableURLProtocols=" + String.join(",", protocols));
                }
                if (inlineBeforeAnalysis) {
                    if (graalVMVersion.isOlderThan(GraalVM.Version.VERSION_21_3)) {
                        
                        nativeImageArgs.add("-H:+InlineBeforeAnalysis");
                    }
                } else {
                    nativeImageArgs.add("-H:-InlineBeforeAnalysis");
                }
                if (!noPIE.isEmpty()) {
                    nativeImageArgs.add("-H:NativeLinkerOption=" + noPIE);
                }

                if (!nativeConfig.enableIsolates) {
                    nativeImageArgs.add("-H:-SpawnIsolates");
                }
                if (!nativeConfig.enableJni) {
                    log.warn(
                            "Your application is setting the deprecated 'quarkus.native.enable-jni' configuration key to false."
                                    + " Please consider removing this configuration key as it is ignored (JNI is always enabled) and it"
                                    + " will be removed in a future Quarkus version.");
                }
                if (nativeConfig.enableServer) {
                    log.warn(
                            "Your application is setting the deprecated 'quarkus.native.enable-server' configuration key to true."
                                    + " Please consider removing this configuration key as it is ignored"
                                    + " (The Native image build server is always disabled) and it"
                                    + " will be removed in a future Quarkus version.");
                }
                if (nativeConfig.enableVmInspection) {
                    nativeImageArgs.add("-H:+AllowVMInspection");
                }
                if (nativeConfig.autoServiceLoaderRegistration) {
                    nativeImageArgs.add("-H:+UseServiceLoaderFeature");
                    
                    nativeImageArgs.add("-H:+TraceServiceLoaderFeature");
                } else {
                    nativeImageArgs.add("-H:-UseServiceLoaderFeature");
                }
                if (nativeConfig.fullStackTraces) {
                    nativeImageArgs.add("-H:+StackTrace");
                } else {
                    nativeImageArgs.add("-H:-StackTrace");
                }

                if (nativeConfig.enableDashboardDump) {
                    nativeImageArgs.add("-H:DashboardDump=" + outputTargetBuildItem.getBaseName() + "_dashboard.dump");
                    nativeImageArgs.add("-H:+DashboardAll");
                }

                if (nativeImageSecurityProviders != null && !nativeImageSecurityProviders.isEmpty()) {
                    String additionalSecurityProviders = nativeImageSecurityProviders.stream()
                            .map(p -> p.getSecurityProvider())
                            .collect(Collectors.joining(","));
                    nativeImageArgs.add("-H:AdditionalSecurityProviders=" + additionalSecurityProviders);
                }

                if (jpmsExports != null) {
                    HashSet<JPMSExportBuildItem> deduplicatedJpmsExport = new HashSet<>(jpmsExports);
                    for (JPMSExportBuildItem jpmsExport : deduplicatedJpmsExport) {
                        if (graalVMVersion.isNewerThan(jpmsExport.getExportAfter())) {
                            nativeImageArgs.add(
                                    "-J--add-exports=" + jpmsExport.getModule() + "/" + jpmsExport.getPackage()
                                            + "=ALL-UNNAMED");
                        }
                    }
                }

                if (nativeMinimalJavaVersions != null && !nativeMinimalJavaVersions.isEmpty()) {
                    if (graalVMVersion.javaUpdateVersion == GraalVM.Version.UNDEFINED) {
                        log.warnf(
                                "Unable to parse used Java version from native-image version string `%s'. Java version checks will be skipped.",
                                graalVMVersion.fullVersion);
                    } else {
                        nativeMinimalJavaVersions.stream()
                                .filter(a -> !graalVMVersion.jdkVersionGreaterOrEqualTo(a.minFeature, a.minUpdate))
                                .forEach(a -> log.warnf("Expected: Java %d, update %d, Actual: Java %d, update %d. %s",
                                        a.minFeature, a.minUpdate, graalVMVersion.javaFeatureVersion,
                                        graalVMVersion.javaUpdateVersion, a.warning));
                    }
                }

                if (unsupportedOSes != null && !unsupportedOSes.isEmpty()) {
                    final String errs = unsupportedOSes.stream().filter(o -> o.os.active).map(o -> o.error)
                            .collect(Collectors.joining(", "));
                    if (!errs.isEmpty()) {
                        throw new UnsupportedOperationException(errs);
                    }
                }

                for (ExcludeConfigBuildItem excludeConfig : excludeConfigs) {
                    nativeImageArgs.add("--exclude-config");
                    nativeImageArgs.add(excludeConfig.getJarFile());
                    nativeImageArgs.add(excludeConfig.getResourceName());
                }

                
                if (graalVMVersion.is(GraalVM.Version.VERSION_21_3_0) && graalVMVersion.isJava17()) {
                    nativeImageArgs.add("-J--add-exports=java.management/sun.management=ALL-UNNAMED");
                }

                nativeImageArgs.add(nativeImageName);

                
                nativeImageArgs.add("-jar");
                nativeImageArgs.add(runnerJarName);

                return new NativeImageInvokerInfo(nativeImageArgs);
            }

Line commented on: if (graalVMVersion.compareTo(GraalVM.Version.VERSION_22_3_0) >= 0) {

Revised code:
public NativeImageInvokerInfo build() {
                List<String> nativeImageArgs = new ArrayList<>();
                boolean enableSslNative = false;
                boolean inlineBeforeAnalysis = nativeConfig.inlineBeforeAnalysis;
                boolean addAllCharsets = nativeConfig.addAllCharsets;
                boolean enableHttpsUrlHandler = nativeConfig.enableHttpsUrlHandler;
                for (NativeImageSystemPropertyBuildItem prop : nativeImageProperties) {
                    
                    if (prop.getKey().equals("quarkus.ssl.native") && prop.getValue() != null) {
                        enableSslNative = Boolean.parseBoolean(prop.getValue());
                    } else if (prop.getKey().equals("quarkus.jni.enable") && prop.getValue().equals("false")) {
                        log.warn("Your application is setting the deprecated 'quarkus.jni.enable' configuration key to false."
                                + " Please consider removing this configuration key as it is ignored (JNI is always enabled) and it"
                                + " will be removed in a future Quarkus version.");
                    } else if (prop.getKey().equals("quarkus.native.enable-all-security-services") && prop.getValue() != null) {
                        log.warn(
                                "Your application is setting the deprecated 'quarkus.native.enable-all-security-services' configuration key."
                                        + " Please consider removing this configuration key as it is ignored and it"
                                        + " will be removed in a future Quarkus version.");
                    } else if (prop.getKey().equals("quarkus.native.enable-all-charsets") && prop.getValue() != null) {
                        addAllCharsets |= Boolean.parseBoolean(prop.getValue());
                    } else if (prop.getKey().equals("quarkus.native.inline-before-analysis") && prop.getValue() != null) {
                        inlineBeforeAnalysis = Boolean.parseBoolean(prop.getValue());
                    } else {
                        
                        if (prop.getValue() == null) {
                            nativeImageArgs.add("-J-D" + prop.getKey());
                        } else {
                            nativeImageArgs.add("-J-D" + prop.getKey() + "=" + prop.getValue());
                        }
                    }
                }

                final String userLanguage = LocaleProcessor.nativeImageUserLanguage(nativeConfig, localesBuildTimeConfig);
                if (!userLanguage.isEmpty()) {
                    nativeImageArgs.add("-J-Duser.language=" + userLanguage);
                }
                final String userCountry = LocaleProcessor.nativeImageUserCountry(nativeConfig, localesBuildTimeConfig);
                if (!userCountry.isEmpty()) {
                    nativeImageArgs.add("-J-Duser.country=" + userCountry);
                }
                final String includeLocales = LocaleProcessor.nativeImageIncludeLocales(nativeConfig, localesBuildTimeConfig);
                if (!includeLocales.isEmpty()) {
                    nativeImageArgs.add("-H:IncludeLocales=" + includeLocales);
                }

                nativeImageArgs.add("-J-Dfile.encoding=" + nativeConfig.fileEncoding);

                if (enableSslNative) {
                    enableHttpsUrlHandler = true;
                }

                if (nativeImageFeatures == null || nativeImageFeatures.isEmpty()) {
                    throw new IllegalStateException("GraalVM features can't be empty, quarkus core is using some.");
                }
                List<String> featuresList = new ArrayList<>(nativeImageFeatures.size());
                for (NativeImageFeatureBuildItem nativeImageFeature : nativeImageFeatures) {
                    featuresList.add(nativeImageFeature.getQualifiedName());
                }
                nativeImageArgs.add("--features=" + String.join(",", featuresList));

                /*
                 * Instruct GraalVM / Mandrel parse compiler graphs twice, once for the static analysis and once again
                 * for the AOT compilation.
                 *
                 * We do this because single parsing significantly increases memory usage at build time
                 * see https:
                 * https:
                 *
                 * Note: This option must come before the invocation of
                 * {@code handleAdditionalProperties(nativeImageArgs)} to ensure that devs and advanced users can
                 * override it by passing -Dquarkus.native.additional-build-args=-H:+ParseOnce
                 */
                nativeImageArgs.add("-H:-ParseOnce");

                /**
                 * This makes sure the Kerberos integration module is made available in case any library
                 * refers to it (e.g. the PostgreSQL JDBC requires it, seems plausible that many others will as well):
                 * the module is not available by default on Java 17.
                 * No flag was introduced as this merely exposes the visibility of the module, it doesn't
                 * control its actual inclusion which will depend on the usual analysis.
                 */
                nativeImageArgs.add("-J--add-exports=java.security.jgss/sun.security.krb5=ALL-UNNAMED");

                
                nativeImageArgs.add("-J--add-opens=java.base/java.text=ALL-UNNAMED");

                if (nativeConfig.enableReports) {
                    if (graalVMVersion.isOlderThan(GraalVM.Version.VERSION_21_3_2)) {
                        nativeImageArgs.add("-H:+PrintAnalysisCallTree");
                    } else {
                        nativeImageArgs.add("-H:PrintAnalysisCallTreeType=CSV");
                    }
                }

                
                if (graalVMVersion.compareTo(GraalVM.Version.VERSION_22_3_0) >= 0) {
                    
                    nativeImageArgs.add("-H:+CollectImageBuildStatistics");
                    nativeImageArgs.add("-H:ImageBuildStatisticsFile=" + nativeImageName + "-timing-stats.json");
                    
                    nativeImageArgs.add("-H:BuildOutputJSONFile=" + nativeImageName + "-build-output-stats.json");
                }

                /*
                 * Any parameters following this call are forced over the user provided parameters in
                 * quarkus.native.additional-build-args. So if you need a parameter to be overridable through
                 * quarkus.native.additional-build-args please make sure to add it before this call.
                 */
                handleAdditionalProperties(nativeImageArgs);

                nativeImageArgs.add(
                        "-H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime"); 
                nativeImageArgs.add("-H:+JNI");
                nativeImageArgs.add("-H:+AllowFoldMethods");

                if (nativeConfig.headless) {
                    nativeImageArgs.add("-J-Djava.awt.headless=true");
                }

                if (nativeConfig.enableFallbackImages) {
                    nativeImageArgs.add("-H:FallbackThreshold=5");
                } else {
                    
                    
                    nativeImageArgs.add("-H:FallbackThreshold=0");
                }

                
                
                if (graalVMVersion.isNewerThan(GraalVM.Version.VERSION_22_0_0_2) && !classpathIsBroken) {
                    nativeImageArgs.add("--link-at-build-time");
                } else if (!graalVMVersion.isNewerThan(GraalVM.Version.VERSION_22_0_0_2) && classpathIsBroken) {
                    nativeImageArgs.add("--allow-incomplete-classpath");
                }

                if (nativeConfig.reportErrorsAtRuntime) {
                    nativeImageArgs.add("-H:+ReportUnsupportedElementsAtRuntime");
                }
                if (nativeConfig.reportExceptionStackTraces) {
                    nativeImageArgs.add("-H:+ReportExceptionStackTraces");
                }
                if (nativeConfig.debug.enabled) {
                    nativeImageArgs.add("-g");
                    nativeImageArgs.add("-H:DebugInfoSourceSearchPath=" + APP_SOURCES);
                }
                if (nativeConfig.debugBuildProcess) {
                    String debugBuildProcessHost;
                    if (nativeConfig.isContainerBuild()) {
                        debugBuildProcessHost = "0.0.0.0";
                    } else {
                        debugBuildProcessHost = "localhost";
                    }
                    nativeImageArgs
                            .add("-J-Xrunjdwp:transport=dt_socket,address=" + debugBuildProcessHost + ":"
                                    + DEBUG_BUILD_PROCESS_PORT + ",server=y,suspend=y");
                }
                if (nativeConfig.dumpProxies) {
                    nativeImageArgs.add("-Dsun.misc.ProxyGenerator.saveGeneratedFiles=true");
                }
                if (nativeConfig.nativeImageXmx.isPresent()) {
                    nativeImageArgs.add("-J-Xmx" + nativeConfig.nativeImageXmx.get());
                }
                List<String> protocols = new ArrayList<>(2);
                if (nativeConfig.enableHttpUrlHandler) {
                    protocols.add("http");
                }
                if (enableHttpsUrlHandler) {
                    protocols.add("https");
                }
                if (addAllCharsets) {
                    nativeImageArgs.add("-H:+AddAllCharsets");
                } else {
                    nativeImageArgs.add("-H:-AddAllCharsets");
                }
                if (!protocols.isEmpty()) {
                    nativeImageArgs.add("-H:EnableURLProtocols=" + String.join(",", protocols));
                }
                if (inlineBeforeAnalysis) {
                    if (graalVMVersion.isOlderThan(GraalVM.Version.VERSION_21_3)) {
                        
                        nativeImageArgs.add("-H:+InlineBeforeAnalysis");
                    }
                } else {
                    nativeImageArgs.add("-H:-InlineBeforeAnalysis");
                }
                if (!noPIE.isEmpty()) {
                    nativeImageArgs.add("-H:NativeLinkerOption=" + noPIE);
                }

                if (!nativeConfig.enableIsolates) {
                    nativeImageArgs.add("-H:-SpawnIsolates");
                }
                if (!nativeConfig.enableJni) {
                    log.warn(
                            "Your application is setting the deprecated 'quarkus.native.enable-jni' configuration key to false."
                                    + " Please consider removing this configuration key as it is ignored (JNI is always enabled) and it"
                                    + " will be removed in a future Quarkus version.");
                }
                if (nativeConfig.enableServer) {
                    log.warn(
                            "Your application is setting the deprecated 'quarkus.native.enable-server' configuration key to true."
                                    + " Please consider removing this configuration key as it is ignored"
                                    + " (The Native image build server is always disabled) and it"
                                    + " will be removed in a future Quarkus version.");
                }
                if (nativeConfig.enableVmInspection) {
                    nativeImageArgs.add("-H:+AllowVMInspection");
                }
                if (nativeConfig.autoServiceLoaderRegistration) {
                    nativeImageArgs.add("-H:+UseServiceLoaderFeature");
                    
                    nativeImageArgs.add("-H:+TraceServiceLoaderFeature");
                } else {
                    nativeImageArgs.add("-H:-UseServiceLoaderFeature");
                }
                if (nativeConfig.fullStackTraces) {
                    nativeImageArgs.add("-H:+StackTrace");
                } else {
                    nativeImageArgs.add("-H:-StackTrace");
                }

                if (nativeConfig.enableDashboardDump) {
                    nativeImageArgs.add("-H:DashboardDump=" + outputTargetBuildItem.getBaseName() + "_dashboard.dump");
                    nativeImageArgs.add("-H:+DashboardAll");
                }

                if (nativeImageSecurityProviders != null && !nativeImageSecurityProviders.isEmpty()) {
                    String additionalSecurityProviders = nativeImageSecurityProviders.stream()
                            .map(p -> p.getSecurityProvider())
                            .collect(Collectors.joining(","));
                    nativeImageArgs.add("-H:AdditionalSecurityProviders=" + additionalSecurityProviders);
                }

                if (jpmsExports != null) {
                    HashSet<JPMSExportBuildItem> deduplicatedJpmsExport = new HashSet<>(jpmsExports);
                    for (JPMSExportBuildItem jpmsExport : deduplicatedJpmsExport) {
                        if (graalVMVersion.isNewerThan(jpmsExport.getExportAfter())) {
                            nativeImageArgs.add(
                                    "-J--add-exports=" + jpmsExport.getModule() + "/" + jpmsExport.getPackage()
                                            + "=ALL-UNNAMED");
                        }
                    }
                }

                if (nativeMinimalJavaVersions != null && !nativeMinimalJavaVersions.isEmpty()) {
                    if (graalVMVersion.javaUpdateVersion == GraalVM.Version.UNDEFINED) {
                        log.warnf(
                                "Unable to parse used Java version from native-image version string `%s'. Java version checks will be skipped.",
                                graalVMVersion.fullVersion);
                    } else {
                        nativeMinimalJavaVersions.stream()
                                .filter(a -> !graalVMVersion.jdkVersionGreaterOrEqualTo(a.minFeature, a.minUpdate))
                                .forEach(a -> log.warnf("Expected: Java %d, update %d, Actual: Java %d, update %d. %s",
                                        a.minFeature, a.minUpdate, graalVMVersion.javaFeatureVersion,
                                        graalVMVersion.javaUpdateVersion, a.warning));
                    }
                }

                if (unsupportedOSes != null && !unsupportedOSes.isEmpty()) {
                    final String errs = unsupportedOSes.stream().filter(o -> o.os.active).map(o -> o.error)
                            .collect(Collectors.joining(", "));
                    if (!errs.isEmpty()) {
                        throw new UnsupportedOperationException(errs);
                    }
                }

                for (ExcludeConfigBuildItem excludeConfig : excludeConfigs) {
                    nativeImageArgs.add("--exclude-config");
                    nativeImageArgs.add(excludeConfig.getJarFile());
                    nativeImageArgs.add(excludeConfig.getResourceName());
                }

                
                if (graalVMVersion.is(GraalVM.Version.VERSION_21_3_0) && graalVMVersion.isJava17()) {
                    nativeImageArgs.add("-J--add-exports=java.management/sun.management=ALL-UNNAMED");
                }

                nativeImageArgs.add(nativeImageName);

                
                nativeImageArgs.add("-jar");
                nativeImageArgs.add(runnerJarName);

                return new NativeImageInvokerInfo(nativeImageArgs);
            }