private void prepare()

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


    private void prepare(ReleasePrepareRequest prepareRequest, ReleaseResult result)
            throws ReleaseExecutionException, ReleaseFailureException {

        final ReleaseDescriptorBuilder builder = prepareRequest.getReleaseDescriptorBuilder();

        // Create a config containing values from the session properties (ie command line properties with cli).
        ReleaseUtils.copyPropertiesToReleaseDescriptor(
                prepareRequest.getUserProperties(), new ReleaseDescriptorBuilder() {
                    public ReleaseDescriptorBuilder addDevelopmentVersion(String key, String value) {
                        builder.addDevelopmentVersion(key, value);
                        return this;
                    }

                    public ReleaseDescriptorBuilder addReleaseVersion(String key, String value) {
                        builder.addReleaseVersion(key, value);
                        return this;
                    }

                    public ReleaseDescriptorBuilder addDependencyReleaseVersion(String dependencyKey, String version) {
                        builder.addDependencyReleaseVersion(dependencyKey, version);
                        return this;
                    }

                    public ReleaseDescriptorBuilder addDependencyDevelopmentVersion(
                            String dependencyKey, String version) {
                        builder.addDependencyDevelopmentVersion(dependencyKey, version);
                        return this;
                    }
                });

        BuilderReleaseDescriptor config;
        if (BooleanUtils.isNotFalse(prepareRequest.getResume())) {
            config = loadReleaseDescriptor(builder, prepareRequest.getReleaseManagerListener());
        } else {
            config = ReleaseUtils.buildReleaseDescriptor(builder);
        }

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

        List<String> preparePhases = getGoalPhases(releaseStrategy, "prepare");

        goalStart(prepareRequest.getReleaseManagerListener(), "prepare", preparePhases);

        // Later, it would be a good idea to introduce a proper workflow tool so that the release can be made up of a
        // more flexible set of steps.

        String completedPhase = config.getCompletedPhase();
        int index = preparePhases.indexOf(completedPhase);

        for (int idx = 0; idx <= index; idx++) {
            phaseSkip(prepareRequest.getReleaseManagerListener(), preparePhases.get(idx));
        }

        if (index == preparePhases.size() - 1) {
            logInfo(
                    result,
                    "Release preparation already completed. You can now continue with release:perform, "
                            + "or start again using the -Dresume=false flag");
        } else if (index >= 0) {
            logInfo(result, "Resuming release from phase '" + preparePhases.get(index + 1) + "'");
        }

        // start from next phase
        for (int i = index + 1; i < preparePhases.size(); i++) {
            String name = preparePhases.get(i);

            ReleasePhase phase = releasePhases.get(name);

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

            phaseStart(prepareRequest.getReleaseManagerListener(), name);

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

            config.setCompletedPhase(name);
            try {
                configStore.get().write(config);
            } catch (ReleaseDescriptorStoreException e) {
                // TODO: rollback?
                throw new ReleaseExecutionException("Error writing release properties after completing phase", e);
            }

            phaseEnd(prepareRequest.getReleaseManagerListener());
        }

        goalEnd(prepareRequest.getReleaseManagerListener());
    }