File createArgsFile()

in maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfiguration.java [130:227]


    File createArgsFile(
            @Nonnull String moduleName,
            @Nonnull List<String> modulePath,
            @Nonnull List<String> classPath,
            @Nonnull Collection<String> packages,
            File patchFile,
            @Nonnull String startClassName,
            boolean isMainDescriptor,
            @Nonnull List<String[]> providerJpmsArguments)
            throws IOException {
        File surefireArgs = TempFileManager.instance(getTempDirectory()).createTempFile("surefireargs", "");
        if (isDebug()) {
            getLogger().debug("Path to args file: " + surefireArgs.getCanonicalPath());
        } else {
            surefireArgs.deleteOnExit();
        }

        try (FileWriter io = new FileWriter(surefireArgs)) {
            StringBuilder args = new StringBuilder(64 * 1024);
            if (!modulePath.isEmpty()) {
                // https://docs.oracle.com/en/java/javase/11/tools/java.html#GUID-4856361B-8BFD-4964-AE84-121F5F6CF111
                args.append("--module-path").append(NL).append('"');

                for (Iterator<String> it = modulePath.iterator(); it.hasNext(); ) {
                    args.append(replace(it.next(), "\\", "\\\\"));
                    if (it.hasNext()) {
                        args.append(pathSeparatorChar);
                    }
                }

                args.append('"').append(NL);
            }

            if (!classPath.isEmpty()) {
                args.append("--class-path").append(NL).append('"');

                for (Iterator<String> it = classPath.iterator(); it.hasNext(); ) {
                    args.append(replace(it.next(), "\\", "\\\\"));
                    if (it.hasNext()) {
                        args.append(pathSeparatorChar);
                    }
                }

                args.append('"').append(NL);
            }

            if (isMainDescriptor) {
                args.append("--patch-module")
                        .append(NL)
                        .append(moduleName)
                        .append('=')
                        .append('"')
                        .append(replace(patchFile.getPath(), "\\", "\\\\"))
                        .append('"')
                        .append(NL);

                for (String pkg : packages) {
                    args.append("--add-opens")
                            .append(NL)
                            .append(moduleName)
                            .append('/')
                            .append(pkg)
                            .append('=')
                            .append("ALL-UNNAMED")
                            .append(NL);
                }

                args.append("--add-modules").append(NL).append(moduleName).append(NL);

                args.append("--add-reads")
                        .append(NL)
                        .append(moduleName)
                        .append('=')
                        .append("ALL-UNNAMED")
                        .append(NL);
            } else {
                args.append("--add-modules").append(NL).append(moduleName).append(NL);
            }

            for (String[] entries : providerJpmsArguments) {
                for (String entry : entries) {
                    args.append(entry).append(NL);
                }
            }

            args.append(startClassName);

            String argsFileContent = args.toString();

            if (isDebug()) {
                getLogger().debug("args file content:" + NL + argsFileContent);
            }

            io.write(argsFileContent);

            return surefireArgs;
        }
    }