Example usage for org.apache.maven.execution MavenSession getProjectDependencyGraph

List of usage examples for org.apache.maven.execution MavenSession getProjectDependencyGraph

Introduction

In this page you can find the example usage for org.apache.maven.execution MavenSession getProjectDependencyGraph.

Prototype

public ProjectDependencyGraph getProjectDependencyGraph() 

Source Link

Usage

From source file:com.soebes.maven.extensions.incremental.IncrementalModuleBuilder.java

License:Apache License

@Override
public void build(final MavenSession session, final ReactorContext reactorContext,
        ProjectBuildList projectBuilds, final List<TaskSegment> taskSegments,
        ReactorBuildStatus reactorBuildStatus) throws ExecutionException, InterruptedException {

    // Think about this?
    if (!session.getCurrentProject().isExecutionRoot()) {
        LOGGER.info("Not executing in root.");
    }//from  w w w  .j a v a 2 s  . co m

    Path projectRootpath = session.getTopLevelProject().getBasedir().toPath();

    if (!havingScmDeveloperConnection(session)) {
        LOGGER.warn("There is no scm developer connection configured.");
        LOGGER.warn("So we can't estimate which modules have changed.");
        return;
    }

    // TODO: Make more separation of concerns..(Extract the SCM Code from
    // here?
    ScmRepository repository = null;
    try {
        // Assumption: top level project contains the SCM entry.
        repository = scmManager
                .makeScmRepository(session.getTopLevelProject().getScm().getDeveloperConnection());
    } catch (ScmRepositoryException | NoSuchScmProviderException e) {
        LOGGER.error("Failure during makeScmRepository", e);
        return;
    }

    StatusScmResult result = null;
    try {
        result = scmManager.status(repository, new ScmFileSet(session.getTopLevelProject().getBasedir()));
    } catch (ScmException e) {
        LOGGER.error("Failure during status", e);
        return;
    }

    List<ScmFile> changedFiles = result.getChangedFiles();
    if (changedFiles.isEmpty()) {
        LOGGER.info(" Nothing has been changed.");
    } else {

        for (ScmFile scmFile : changedFiles) {
            LOGGER.info(" Changed file: " + scmFile.getPath() + " " + scmFile.getStatus());
        }

        ModuleCalculator mc = new ModuleCalculator(session.getProjectDependencyGraph().getSortedProjects(),
                changedFiles);
        List<MavenProject> calculateChangedModules = mc.calculateChangedModules(projectRootpath);

        for (MavenProject mavenProject : calculateChangedModules) {
            LOGGER.info("Changed Project: " + mavenProject.getId());
        }

        IncrementalModuleBuilderImpl incrementalModuleBuilderImpl = new IncrementalModuleBuilderImpl(
                calculateChangedModules, lifecycleModuleBuilder, session, reactorContext, taskSegments);

        // Really build only changed modules.
        incrementalModuleBuilderImpl.build();
    }
}

From source file:com.soebes.maven.extensions.incremental.IncrementalModuleBuilderImpl.java

License:Apache License

IncrementalModuleBuilderImpl(List<MavenProject> selectedProjects, LifecycleModuleBuilder lifecycleModuleBuilder,
        MavenSession session, ReactorContext reactorContext, List<TaskSegment> taskSegments) {

    this.lifecycleModuleBuilder = Objects.requireNonNull(lifecycleModuleBuilder,
            "lifecycleModuleBuilder is not allowed to be null.");
    this.mavenSession = Objects.requireNonNull(session, "session is not allowed to be null.");
    this.taskSegments = Objects.requireNonNull(taskSegments, "taskSegements is not allowed to be null");
    this.reactorContext = Objects.requireNonNull(reactorContext, "reactorContext is not allowed to be null.");

    ProjectDependencyGraph projectDependencyGraph = session.getProjectDependencyGraph();

    List<MavenProject> intermediateResult = new LinkedList<>();

    for (MavenProject selectedProject : selectedProjects) {
        intermediateResult.add(selectedProject);
        // Up or downstream ? (-amd)
        intermediateResult.addAll(projectDependencyGraph.getDownstreamProjects(selectedProject, true));
        // TODO: Need to think about this? -am ?
        // intermediateResult.addAll(projectDependencyGraph.getUpstreamProjects(selectedProject,
        // true));
    }/*from  w  w  w  .ja v a  2 s.  c om*/

    List<MavenProject> result = new LinkedList<>();

    for (MavenProject project : intermediateResult) {
        if (!result.contains(project)) {
            result.add(project);
        }
    }

    this.projects = result;

}

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   ww w .  ja  v a 2 s  .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.");
    }
}

From source file:io.sundr.maven.filter.SessionArtifactFilter.java

License:Apache License

public SessionArtifactFilter(MavenSession session, boolean include) {
    this.projects = session.getProjectDependencyGraph().getSortedProjects();
    this.include = include;
}

From source file:io.takari.maven.builder.smart.SmartBuilderImpl.java

License:Apache License

SmartBuilderImpl(LifecycleModuleBuilder lifecycleModuleBuilder, MavenSession session,
        ReactorContext reactorContext, List<TaskSegment> taskSegments) {
    this.lifecycleModuleBuilder = lifecycleModuleBuilder;
    this.rootSession = session;
    this.reactorContext = reactorContext;
    this.taskSegments = taskSegments;

    final List<MavenProject> projects = session.getProjects();
    this.degreeOfConcurrency = Integer.valueOf(session.getRequest().getDegreeOfConcurrency());

    List<Listener> listeners = new ArrayList<>();

    this.projectsBuildMetrics = new ProjectsBuildMetrics(projects);
    listeners.add(projectsBuildMetrics);

    BuildProgressReportThread progressReporter = null;
    if (isProfiling()) {
        progressReporter = new BuildProgressReportThread(projects.size(), degreeOfConcurrency);
        progressReporter.start();//  w  w  w. j a v a 2 s.c om
        listeners.add(progressReporter);
    }
    this.progressReporter = progressReporter;

    final Comparator<MavenProject> projectComparator = ProjectComparator.create(session);

    this.reactorBuildQueue = new ReactorBuildQueue(session.getProjectDependencyGraph());
    this.listeners = Collections.unmodifiableList(listeners);
    this.executor = new ProjectExecutorService(degreeOfConcurrency, projectComparator);
}

From source file:ms.dew.devops.maven.function.DependenciesResolver.java

License:Apache License

/**
 * Init./*from   w  w  w .  j ava  2  s  .c  o m*/
 *
 * @param mavenSession the maven session
 */
public static void init(MavenSession mavenSession) {
    if (ExecuteOnceProcessor.executedCheck(DependenciesResolver.class)) {
        return;
    }
    try {
        DefaultProjectDependenciesResolver resolver = (DefaultProjectDependenciesResolver) mavenSession
                .getContainer().lookup(ProjectDependenciesResolver.class.getName());
        for (MavenProject mavenProject : mavenSession.getProjectDependencyGraph().getSortedProjects()) {
            Set<Artifact> result = resolver.resolve(mavenProject, Collections.singleton(Artifact.SCOPE_COMPILE),
                    mavenSession);
            mavenProject.setArtifacts(result);
        }
    } catch (ArtifactResolutionException | ArtifactNotFoundException | ComponentLookupException e) {
        throw new GlobalProcessException(e.getMessage(), e);
    }
}