private void perform()

in maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java [271:345]


    private void perform(ReleasePerformRequest performRequest, ReleaseResult result)
            throws ReleaseExecutionException, ReleaseFailureException {

        // https://issues.apache.org/jira/browse/MRELEASE-1104 because stageRepository is an additional arg
        // and only adding at perform stage it's not available during prepare and so not save the not available
        // when reloading. save this then change again after load
        String additionalArguments =
                performRequest.getReleaseDescriptorBuilder().build().getAdditionalArguments();

        List<String> specificProfiles = ReleaseUtils.buildReleaseDescriptor(
                        performRequest.getReleaseDescriptorBuilder())
                .getActivateProfiles();

        ReleaseDescriptorBuilder builder = loadReleaseDescriptorBuilder(
                performRequest.getReleaseDescriptorBuilder(), performRequest.getReleaseManagerListener());

        builder.setAdditionalArguments(additionalArguments);

        if (specificProfiles != null && !specificProfiles.isEmpty()) {
            List<String> allProfiles =
                    new ArrayList<>(ReleaseUtils.buildReleaseDescriptor(builder).getActivateProfiles());
            for (String specificProfile : specificProfiles) {
                if (!allProfiles.contains(specificProfile)) {
                    allProfiles.add(specificProfile);
                }
            }
            builder.setActivateProfiles(allProfiles);
        }

        ReleaseDescriptor releaseDescriptor = ReleaseUtils.buildReleaseDescriptor(builder);

        Strategy releaseStrategy = getStrategy(releaseDescriptor.getReleaseStrategyId());

        List<String> performPhases = getGoalPhases(releaseStrategy, "perform");

        goalStart(performRequest.getReleaseManagerListener(), "perform", performPhases);

        for (String name : performPhases) {
            ReleasePhase phase = releasePhases.get(name);

            if (phase == null) {
                throw new ReleaseExecutionException("Unable to find phase '" + name + "' to execute");
            }

            phaseStart(performRequest.getReleaseManagerListener(), name);

            ReleaseResult phaseResult = null;
            try {
                if (BooleanUtils.isTrue(performRequest.getDryRun())) {
                    phaseResult = phase.simulate(
                            releaseDescriptor,
                            performRequest.getReleaseEnvironment(),
                            performRequest.getReactorProjects());
                } else {
                    phaseResult = phase.execute(
                            releaseDescriptor,
                            performRequest.getReleaseEnvironment(),
                            performRequest.getReactorProjects());
                }
            } finally {
                if (result != null && phaseResult != null) {
                    result.appendOutput(phaseResult.getOutput());
                }
            }

            phaseEnd(performRequest.getReleaseManagerListener());
        }

        if (BooleanUtils.isNotFalse(performRequest.getClean())) {
            // call release:clean so that resume will not be possible anymore after a perform
            clean(performRequest);
        }

        goalEnd(performRequest.getReleaseManagerListener());
    }