public void executeGoals()

in maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java [57:139]


    public void executeGoals(
            File workingDirectory,
            List<String> goals,
            ReleaseEnvironment releaseEnvironment,
            boolean interactive,
            String additionalArguments,
            String pomFileName,
            ReleaseResult result)
            throws MavenExecutorException {
        InvokerLogger bridge = getInvokerLogger();

        Invoker invoker = new DefaultInvoker()
                .setMavenHome(releaseEnvironment.getMavenHome())
                .setLocalRepositoryDirectory(releaseEnvironment.getLocalRepositoryDirectory())
                .setLogger(bridge);

        InvocationRequest req = new DefaultInvocationRequest()
                .setDebug(getLogger().isDebugEnabled())
                .setBaseDirectory(workingDirectory)
                // fix for MRELEASE-1105
                // .addShellEnvironment( "MAVEN_DEBUG_OPTS", "" )
                .setBatchMode(!interactive)
                .setJavaHome(releaseEnvironment.getJavaHome())
                .setOutputHandler(getLogger()::info)
                .setErrorHandler(getLogger()::error);

        // for interactive mode we need some inputs stream
        if (interactive) {
            req.setInputStream(System.in);
        }

        if (pomFileName != null) {
            req.setPomFileName(pomFileName);
        }

        File settingsFile = null;
        if (releaseEnvironment.getSettings() != null) {
            // Have to serialize to a file as if Maven is embedded, there may not actually be a settings.xml on disk
            try {
                settingsFile = Files.createTempFile("release-settings", ".xml").toFile();
                SettingsXpp3Writer writer = getSettingsWriter();

                try (FileWriter fileWriter = new FileWriter(settingsFile)) {
                    writer.write(fileWriter, encryptSettings(releaseEnvironment.getSettings()));
                }
                req.setUserSettingsFile(settingsFile);
            } catch (IOException e) {
                throw new MavenExecutorException("Could not create temporary file for release settings.xml", e);
            }
        }

        try {
            List<String> targetGoals = new ArrayList<>(goals);

            if (additionalArguments != null && !additionalArguments.isEmpty()) {
                // additionalArguments will be parsed be MavenInvoker
                targetGoals.add(additionalArguments);
            }

            req.setGoals(targetGoals);

            try {
                InvocationResult invocationResult = invoker.execute(req);

                if (invocationResult.getExecutionException() != null) {
                    throw new MavenExecutorException(
                            "Error executing Maven.", invocationResult.getExecutionException());
                }

                if (invocationResult.getExitCode() != 0) {
                    throw new MavenExecutorException(
                            "Maven execution failed, exit code: " + invocationResult.getExitCode(),
                            invocationResult.getExitCode());
                }
            } catch (MavenInvocationException e) {
                throw new MavenExecutorException("Failed to invoke Maven build.", e);
            }
        } finally {
            if (settingsFile != null && settingsFile.exists() && !settingsFile.delete()) {
                settingsFile.deleteOnExit();
            }
        }
    }