protected List createJlinkArgs()

in src/main/java/org/apache/maven/plugins/jlink/JLinkMojo.java [670:774]


    protected List<String> createJlinkArgs(Collection<String> pathsOfModules, Collection<String> modulesToAdd)
            throws MojoExecutionException {
        List<String> jlinkArgs = new ArrayList<>();

        if (stripDebug) {
            jlinkArgs.add("--strip-debug");
        }

        if (bindServices) {
            jlinkArgs.add("--bind-services");
        }

        if (endian != null) {
            jlinkArgs.add("--endian");
            jlinkArgs.add(endian);
        }
        if (ignoreSigningInformation) {
            jlinkArgs.add("--ignore-signing-information");
        }
        if (compress != null) {
            jlinkArgs.add("--compress");
            jlinkArgs.add(compress);
        }
        if (launcher != null) {
            if (launchers != null) {
                throw new MojoExecutionException("Specify either single <launcher> or multiple <launchers>, not both.");
            } else {
                launchers = List.of(launcher);
            }
        }
        if (launchers != null) {
            for (String item : launchers) {
                jlinkArgs.add("--launcher");
                jlinkArgs.add(item);
            }
        }
        if (addOptions != null && !addOptions.isEmpty()) {
            jlinkArgs.add("--add-options=" + String.join(" ", addOptions));
        }

        if (disablePlugin != null) {
            jlinkArgs.add("--disable-plugin");
            jlinkArgs.add(disablePlugin);
        }
        if (pathsOfModules != null && !pathsOfModules.isEmpty()) {
            // @formatter:off
            jlinkArgs.add("--module-path");
            jlinkArgs.add(String.join(File.pathSeparator, pathsOfModules).replace("\\", "\\\\"));
            // @formatter:off
        }

        if (noHeaderFiles) {
            jlinkArgs.add("--no-header-files");
        }

        if (noManPages) {
            jlinkArgs.add("--no-man-pages");
        }

        if (hasLimitModules()) {
            jlinkArgs.add("--limit-modules");
            String sb = String.join(",", limitModules);
            jlinkArgs.add(sb);
        }

        if (!modulesToAdd.isEmpty()) {
            jlinkArgs.add("--add-modules");
            // This must be name of the module and *NOT* the name of the
            // file! Can we somehow pre check this information to fail early?
            String sb = String.join(",", modulesToAdd);
            jlinkArgs.add(sb.replace("\\", "\\\\"));
        }

        if (hasIncludeLocales()) {
            jlinkArgs.add("--add-modules");
            jlinkArgs.add("jdk.localedata");
            jlinkArgs.add("--include-locales");
            String sb = String.join(",", includeLocales);
            jlinkArgs.add(sb);
        }

        if (pluginModulePath != null) {
            jlinkArgs.add("--plugin-module-path");
            StringBuilder sb = convertSeparatedModulePathToPlatformSeparatedModulePath(pluginModulePath);
            jlinkArgs.add(sb.toString().replace("\\", "\\\\"));
        }

        if (buildDirectory != null) {
            jlinkArgs.add("--output");
            jlinkArgs.add(outputDirectoryImage.getAbsolutePath());
        }

        if (verbose) {
            jlinkArgs.add("--verbose");
        }

        // NOTE: suggestProviders is a terminal JlinkTask, so must be at the end!
        if (hasSuggestProviders()) {
            jlinkArgs.add("--suggest-providers");
            String sb = String.join(",", suggestProviders);
            jlinkArgs.add(sb);
        }

        return Collections.unmodifiableList(jlinkArgs);
    }