Example usage for org.apache.maven.execution ProjectDependencyGraph getUpstreamProjects

List of usage examples for org.apache.maven.execution ProjectDependencyGraph getUpstreamProjects

Introduction

In this page you can find the example usage for org.apache.maven.execution ProjectDependencyGraph getUpstreamProjects.

Prototype

List<MavenProject> getUpstreamProjects(MavenProject project, boolean transitive);

Source Link

Document

Gets the upstream projects of the specified project.

Usage

From source file:info.ronjenkins.maven.rtr.steps.ValidateSmartReactorEligibility.java

License:Apache License

@Override
public void execute(final MavenSession session, final RTRComponents components) throws MavenExecutionException {
    // Ensure that the Maven Release Plugin is not in the list of goals.
    for (final String goal : session.getGoals()) {
        if (goal.startsWith("release:") || goal.startsWith("org.apache.maven.plugins:maven-release-plugin:")) {
            this.logger.error("");
            throw new SmartReactorSanityCheckException(
                    "A goal from the Maven Release Plugin was specified for execution.");
        }//from  w  w  w . java2s .  c  o  m
    }
    // Ensure that the Maven Release Plugin is not declared in the POM.
    final List<MavenProject> projectsWithMavenReleasePlugin = new ArrayList<>();
    for (final MavenProject project : session.getProjects()) {
        for (final Artifact artifact : project.getPluginArtifacts()) {
            if (artifact.getGroupId().equals("org.apache.maven.plugins")
                    && artifact.getArtifactId().equals("maven-release-plugin")) {
                projectsWithMavenReleasePlugin.add(project);
            }
        }
    }
    if (!projectsWithMavenReleasePlugin.isEmpty()) {
        this.logger.error("");
        for (final MavenProject project : projectsWithMavenReleasePlugin) {
            this.logger.error("Project " + project + " contains a reference to the Maven Release Plugin.");
        }
        this.logger.error("");
        throw new SmartReactorSanityCheckException("Reactor is ineligible to become a Smart Reactor.");
    }
    // Ensure that the root is a SNAPSHOT.
    final MavenProject root = session.getTopLevelProject();
    if (!root.getArtifact().isSnapshot()) {
        this.logger.error("");
        this.logger.error("Top-level project " + root + " is not a SNAPSHOT.");
        this.logger.error("");
        throw new SmartReactorSanityCheckException("Reactor is ineligible to become a Smart Reactor.");
    }
    // Ensure that the ancestors of every SNAPSHOT are also SNAPSHOTs.
    final ProjectDependencyGraph pdg = session.getProjectDependencyGraph();
    final List<MavenProject> badProjects = new ArrayList<>();
    for (final MavenProject project : session.getProjects()) {
        if (project.getArtifact().isSnapshot()) {
            for (final MavenProject ancestor : pdg.getUpstreamProjects(project, true)) {
                if (!ancestor.getArtifact().isSnapshot()) {
                    badProjects.add(ancestor);
                }
            }
        }
    }
    // Fail if necessary.
    if (!badProjects.isEmpty()) {
        this.logger.error("");
        this.logger.error(
                "The following release projects in the reactor have SNAPSHOT dependencies in the reactor, which is not allowed:");
        for (final MavenProject badProject : badProjects) {
            this.logger.error("  " + badProject.getArtifact().toString() + " @ "
                    + badProject.getFile().getAbsolutePath());
        }
        this.logger.error("");
        throw new SmartReactorSanityCheckException("Reactor is ineligible to become a Smart Reactor.");
    }
}