All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.mojo.buildplan.ReportMojo Maven / Gradle / Ivy

/*
 * Copyright (C) 2012 Jean-Christophe Gay ([email protected])
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.codehaus.mojo.buildplan;

import static org.codehaus.mojo.buildplan.display.TableColumn.ARTIFACT_ID;
import static org.codehaus.mojo.buildplan.display.TableColumn.EXECUTION_ID;
import static org.codehaus.mojo.buildplan.display.TableColumn.GOAL;
import static org.codehaus.mojo.buildplan.display.TableColumn.LIFECYCLE;
import static org.codehaus.mojo.buildplan.display.TableColumn.PHASE;

import java.util.Locale;
import org.apache.maven.doxia.sink.Sink;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.lifecycle.DefaultLifecycles;
import org.apache.maven.lifecycle.LifecycleExecutor;
import org.apache.maven.lifecycle.MavenExecutionPlan;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.reporting.AbstractMavenReport;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.mojo.buildplan.display.MojoExecutionDisplay;
import org.codehaus.mojo.buildplan.display.PlainTextMojoExecutionDisplay;
import org.codehaus.mojo.buildplan.display.TableColumn;

/** Report plugin executions for the current project. */
@Mojo(name = "report", defaultPhase = LifecyclePhase.SITE)
public class ReportMojo extends AbstractMavenReport {

    @Component
    private LifecycleExecutor lifecycleExecutor;

    @Component(role = DefaultLifecycles.class)
    DefaultLifecycles defaultLifecycles;

    @Parameter(defaultValue = "${session}", readonly = true)
    private MavenSession session;

    @Override
    protected void executeReport(Locale locale) throws MavenReportException {

        MavenExecutionPlan plan;
        try {
            plan = calculateExecutionPlan();
        } catch (MojoFailureException e) {
            throw new MavenReportException("Cannot calculate execution plan...", e);
        }

        Log logger = getLog();
        logger.info(
                "Generating " + getOutputName() + ".html" + " for " + project.getName() + " " + project.getVersion());

        // Get the Maven Doxia Sink, which will be used to generate the
        // various elements of the document
        Sink mainSink = getSink();
        if (mainSink == null) {
            throw new MavenReportException("Could not get the Doxia sink");
        }

        // Page title
        mainSink.head();
        mainSink.title();
        mainSink.text("Build Plan for " + project.getName() + " " + project.getVersion());
        mainSink.title_();
        mainSink.head_();

        mainSink.body();

        mainSink.header();
        mainSink.rawText("

" + getDescription(locale) + "

"); mainSink.header_(); mainSink.table(); mainSink.tableRows(null, false); mainSink.tableRow(); tableHead(mainSink, LIFECYCLE); tableHead(mainSink, PHASE); tableHead(mainSink, ARTIFACT_ID); tableHead(mainSink, GOAL); tableHead(mainSink, EXECUTION_ID); mainSink.tableRow_(); for (MojoExecution execution : plan.getMojoExecutions()) { MojoExecutionDisplay display = new PlainTextMojoExecutionDisplay(execution); mainSink.tableRow(); tableCell(mainSink, display.getLifecycle(defaultLifecycles)); tableCell(mainSink, display.getPhase()); tableCell(mainSink, display.getArtifactId()); tableCell(mainSink, display.getGoal()); tableCell(mainSink, display.getExecutionId()); mainSink.tableRow_(); } mainSink.tableRows_(); mainSink.table_(); mainSink.body_(); } private void tableCell(Sink mainSink, String content) { mainSink.tableCell(); mainSink.text(content); mainSink.tableCell_(); } private void tableHead(Sink mainSink, TableColumn lifecycle) { mainSink.tableHeaderCell(); mainSink.text(lifecycle.title()); mainSink.tableHeaderCell_(); } @Override public String getOutputName() { return "buildplan-report"; } @Override public String getName(Locale locale) { return "Build Plan"; } @Override public String getDescription(Locale locale) { return "List plugin executions for " + currentProject(); } private String currentProject() { return session.getCurrentProject().getGroupId() + ":" + session.getCurrentProject().getArtifactId(); } protected MavenExecutionPlan calculateExecutionPlan() throws MojoFailureException { try { return lifecycleExecutor.calculateExecutionPlan(session, "deploy"); } catch (Exception e) { throw new MojoFailureException( String.format("Cannot calculate Maven execution plan, caused by: %s", e.getMessage()), e); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy