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

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

Introduction

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

Prototype

public MavenProject getTopLevelProject() 

Source Link

Usage

From source file:com.github.shyiko.ump.NonRecursiveExtension.java

License:Apache License

public void afterProjectsRead(MavenSession session) {
    if (session.getGoals().isEmpty() && session.getUserProperties().isEmpty()) {
        session.setProjects(Arrays.asList(session.getTopLevelProject()));
        if (session.getCurrentProject().getDefaultGoal() == null) {
            session.getGoals().add("usage:show");
        }//from  w  w  w.j ava 2s .c  o m
    }
}

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

License:Apache License

private boolean havingScmDeveloperConnection(MavenSession session) {
    if (session.getTopLevelProject().getScm() == null) {
        LOGGER.error("The incremental module builder needs a correct scm configuration.");
        return false;
    }/*w  ww .  j  a v a2 s.c o  m*/

    if (StringUtils.isEmpty(session.getTopLevelProject().getScm().getDeveloperConnection())) {
        LOGGER.error("The incremental module builder needs the scm developerConnection to work properly.");
        return false;
    }

    return true;
}

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.");
    }// www  .j a  v a2  s .  c  o 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:example.LoggingListener.java

License:Apache License

@Override
public void sessionEnded(BuildListener.Event event) {
    event.log.info("Properties passed to listener:");
    for (Map.Entry<Object, Object> entry : event.listenerProperties.entrySet()) {
        event.log.info(entry.getKey() + " = " + entry.getValue());
    }//from   ww w  .j a  va2  s.  c  o m

    MavenSession session = event.event.getSession();
    MavenProject project = session.getTopLevelProject();
    if (session.getResult().getBuildSummary(project) instanceof BuildSuccess) {
        event.log.info("FINISHED -- PASSED -- " + BuildUtil.calculateBuildTimeFor(session));
    } else {
        event.log.info("FINISHED -- FAILED -- " + BuildUtil.calculateBuildTimeFor(session));
    }
}

From source file:fr.brouillard.oss.jgitver.JGitverExtension.java

License:Apache License

@Override
public void afterProjectsRead(MavenSession mavenSession) throws MavenExecutionException {
    MavenProject rootProject = mavenSession.getTopLevelProject();
    List<MavenProject> projects = locateProjects(mavenSession, rootProject.getModules());

    Map<GAV, String> newProjectVersions = new LinkedHashMap<>();

    if (JGitverModelProcessor.class.isAssignableFrom(modelProcessor.getClass())) {
        JGitverModelProcessor jGitverModelProcessor = JGitverModelProcessor.class.cast(modelProcessor);
        JGitverModelProcessorWorkingConfiguration workingConfiguration = jGitverModelProcessor
                .getWorkingConfiguration();

        if (workingConfiguration == null) {
            logger.warn("");
            logger.warn("jgitver has changed!");
            logger.warn("");
            logger.warn(/*from   w  ww  .  ja v a2s .  c  o  m*/
                    "it now requires the usage of maven core extensions instead of standard plugin extensions.");
            logger.warn("The plugin must be now declared in a `.mvn/extensions.xml` file.");
            logger.warn("");
            logger.warn("    read https://github.com/jgitver/jgitver-maven-plugin for further information");
            logger.warn("");
            throw new MavenExecutionException("detection of jgitver old setting mechanism",
                    new IllegalStateException("jgitver must now use maven core extensions"));
        }

        newProjectVersions = workingConfiguration.getNewProjectVersions();
    } else {
        logger.info("jgitver-maven-plugin is about to change project(s) version(s)");

        String newVersion = null;
        try {
            newVersion = JGitverUtils
                    .calculateVersionForProject(rootProject, mavenSession.getUserProperties(), logger)
                    .getCalculatedVersion();
        } catch (IOException ex) {
            throw new MavenExecutionException("failure calculating version from git information", ex);
        }

        // Let's modify in memory resolved projects model
        for (MavenProject project : projects) {
            GAV projectGAV = GAV.from(project); // SUPPRESS CHECKSTYLE AbbreviationAsWordInName

            logger.debug("about to change in memory POM for: " + projectGAV);
            // First the project itself
            project.setVersion(newVersion);
            logger.debug("    version set to " + newVersion);
            VersionRange newVersionRange = VersionRange.createFromVersion(newVersion);
            project.getArtifact().setVersionRange(newVersionRange);
            logger.debug("    artifact version range set to " + newVersionRange);
            newProjectVersions.put(projectGAV, newVersion);

            // No need to worry about parent link, because model is in memory
        }

        try {
            JGitverUtils.attachModifiedPomFilesToTheProject(projects, newProjectVersions, mavenSession, logger);
        } catch (IOException | XmlPullParserException ex) {
            throw new MavenExecutionException("cannot attach updated POMs during project execution", ex);
        }
    }

    newProjectVersions.entrySet()
            .forEach(e -> logger.info("    " + e.getKey().toString() + " -> " + e.getValue()));
}

From source file:info.ronjenkins.maven.rtr.RTR.java

License:Apache License

/**
 * RTR entry point./* w  w w . j  ava  2s  . c o m*/
 *
 * @param session
 *          the current Maven session, never null.
 */
@Override
public void afterProjectsRead(final MavenSession session) throws MavenExecutionException {
    // Don't allow this extension to be loaded as a build extension.
    try {
        RTR.checkForRequiredClasses();
    } catch (final NoClassDefFoundError e) {
        throw new SmartReactorSanityCheckException(
                "This extension must be loaded as a core extension, not as a build extension.");
    }
    // Don't allow double-execution due to double-classloading.
    this.detectDoubleExecution(session);
    if (this.disabledDueToDoubleLoad) {
        return;
    }
    // Don't do anything if the Smart Reactor is disabled.
    final MavenProject executionRoot = session.getTopLevelProject();
    this.disabled = RTRConfig.isDisabled(session, executionRoot);
    if (this.disabled) {
        return;
    }
    this.release = RTRConfig.isRelease(session, executionRoot);
    this.externalSnapshotsAllowed = RTRConfig.isExternalSnapshotsAllowed(session, executionRoot);
    this.logger.info("Assembling smart reactor...");
    this.components = new RTRComponents(this.builder);
    this.executeSteps(this.startSteps, session, this.components);
    // Done. Maven build will proceed from here, none the wiser. ;)
}

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

License:Apache License

@Override
public void execute(final MavenSession session, final RTRComponents components) throws MavenExecutionException {
    // Check for a single POM-only reactor, assuming this is prohibited.
    if (session.getProjects().size() == 1) {
        final MavenProject executionRoot = session.getTopLevelProject();
        if (executionRoot.getArtifact().getType().equals("pom")
                && !RTRConfig.isSinglePomReactorAllowed(session, executionRoot)) {
            this.logger.error("");
            throw new SmartReactorSanityCheckException(
                    "Reactor contains a single POM-packaging project, which is not allowed. If this is intended, set property \""
                            + RTRConfig.PROP_SINGLE_POM_REACTOR_ALLOWED + "\" to true.");
        }/*from  w w w  .ja va2s  . c  om*/
    }
}

From source file:info.ronjenkins.maven.rtr.steps.release.TransformProjectsIntoReleases.java

License:Apache License

@Override
protected void configureReleaseDescriptor(final MavenSession session, final RTRComponents components) {
    final MavenProject executionRoot = session.getTopLevelProject();
    this.releaseDescriptor.setAddSchema(RTRConfig.isAddSchema(session, executionRoot));
    this.releaseDescriptor
            .setAllowTimestampedSnapshots(RTRConfig.isAllowTimestampedSnapshots(session, executionRoot));
    this.releaseDescriptor.setAutoVersionSubmodules(RTRConfig.isAutoVersionSubmodules(session, executionRoot));
    this.releaseDescriptor
            .setProjectVersionPolicyId(RTRConfig.getProjectVersionPolicyId(session, executionRoot));
    final String releaseVersion = RTRConfig.getReleaseVersion(session, executionRoot);
    if (releaseVersion != null) {
        this.releaseDescriptor.setDefaultReleaseVersion(releaseVersion);
    }/*  w ww  .j  ava  2s  . com*/
    final String tag = RTRConfig.getTag(session, executionRoot);
    if (tag != null) {
        this.releaseDescriptor.setScmReleaseLabel(tag);
    }
    final String tagBase = RTRConfig.getTagBase(session, executionRoot);
    if (tagBase != null) {
        this.releaseDescriptor.setScmTagBase(tagBase);
    }
    final String tagNameFormat = RTRConfig.getTagNameFormat(session, executionRoot);
    if (tagNameFormat != null) {
        this.releaseDescriptor.setScmTagNameFormat(tagNameFormat);
    }
}

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 .  j  a 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:it.session.maven.plugin.TilesMavenLifecycleParticipant.java

License:Apache License

/**
 * Invoked after all MavenProject instances have been created.
 * <p/>/*from  w  w  w.jav a 2  s . com*/
 * This callback is intended to allow extensions to manipulate MavenProjects
 * before they are sorted and actual build execution starts.
 */
public void afterProjectsRead(MavenSession mavenSession) throws MavenExecutionException {

    final MavenProject topLevelProject = mavenSession.getTopLevelProject();
    List<String> subModules = topLevelProject.getModules();

    if (subModules != null && subModules.size() > 0) {
        //We're in a multi-module build, we need to trigger model merging on all sub-modules
        for (MavenProject subModule : mavenSession.getProjects()) {
            if (subModule != topLevelProject) {
                mergeTiles(subModule, mavenSession);
            }
        }
    } else {
        mergeTiles(topLevelProject, mavenSession);
    }
}