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

org.openengsb.openengsbplugin.tools.DefaultMavenExecutor Maven / Gradle / Ivy

/**
 * Licensed to the Austrian Association for Software Tool Integration (AASTI)
 * under one or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information regarding copyright
 * ownership. The AASTI licenses this file to you 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.openengsb.openengsbplugin.tools;

import java.io.File;
import java.util.List;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.apache.maven.Maven;
import org.apache.maven.execution.DefaultMavenExecutionRequest;
import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.execution.MavenExecutionResult;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import org.openengsb.openengsbplugin.base.AbstractOpenengsbMojo;

public class DefaultMavenExecutor implements MavenExecutor {

    private static final Logger LOG = Logger.getLogger(DefaultMavenExecutor.class);

    private MavenExecutionRequest embeddedRequest;
    private File baseDir = null;

    private MavenSession session;
    private Maven maven;

    public DefaultMavenExecutor(AbstractOpenengsbMojo mojo) {
        session = mojo.getSession();
        maven = mojo.getMaven();
        init();
    }

    private void init() {
        LOG.trace("#############################");
        LOG.trace(String.format("session: %s", session));
        LOG.trace("#############################");
        try {
            baseDir = session.getRequest().getPom().getParentFile();
        } catch (NullPointerException ex) {
            // no parent, take current
            baseDir = new File(session.getExecutionRootDirectory());
        }
        LOG.trace(String.format("basedir: %s", baseDir.toURI().toString()));
        embeddedRequest = generateRequestFromWrapperRequest(session);
        clearProperties(embeddedRequest);
    }

    private void clearProperties(MavenExecutionRequest request) {
        request.getGoals().clear();
        request.getUserProperties().clear();
        request.getActiveProfiles().clear();
        request.getInactiveProfiles().clear();
    }

    @Override
    public void addGoals(List goals) {
        if (goals != null) {
            embeddedRequest.getGoals().addAll(goals);
        }
    }

    @Override
    public void addActivatedProfiles(List activatedProfiles) {
        if (activatedProfiles != null) {
            embeddedRequest.getActiveProfiles().addAll(activatedProfiles);
        }
    }

    @Override
    public void addDeactivatedProfiles(List deactivatedProfiles) {
        if (deactivatedProfiles != null) {
            embeddedRequest.getInactiveProfiles().addAll(deactivatedProfiles);
        }
    }

    @Override
    public void addUserProperties(Properties userproperties) {
        if (userproperties != null) {
            embeddedRequest.getUserProperties().putAll(userproperties);
        }
    }

    @Override
    public void addProperties(List goals, List activatedProfiles, List deactivatedProfiles,
                              Properties userproperties) {
        addGoals(goals);
        addActivatedProfiles(activatedProfiles);
        addDeactivatedProfiles(deactivatedProfiles);
        addUserProperties(userproperties);
    }

    @Override
    public void setRecursive(boolean recursive) {
        embeddedRequest.setRecursive(recursive);
    }

    @Override
    public void setInterActiveMode(boolean interactiveMode) {
        embeddedRequest.setInteractiveMode(interactiveMode);
    }

    @Override
    public void setCustomPomFile(File pomFile) {
        LOG.trace(String.format("setting custom pom: %s", pomFile.toURI().toString()));
        embeddedRequest.setPom(pomFile);
        LOG.trace(String.format("setting basedir: %s", baseDir.toURI().toString()));
        embeddedRequest.setBaseDirectory(baseDir);
    }

    @Override
    public void execute(Log log) throws MojoExecutionException {
        printExecutionStartInfoLog(log);

        LOG.trace(String.format("basedir of embedded request: %s", embeddedRequest.getBaseDirectory()));

        LOG.trace("executing execution request with maven - start");
        MavenExecutionResult result = maven.execute(embeddedRequest);
        LOG.trace("executing execution request with maven - end");

        LOG.trace(String.format("basedir of embedded request: %s", embeddedRequest.getBaseDirectory()));

        printExecutionEndInfoLog(log);
        logAndPassOnExceptionIfAny(result, log);
    }

    private MavenExecutionRequest generateRequestFromWrapperRequest(MavenSession session) {
        MavenExecutionRequest wrapperRequest = session.getRequest();
        return DefaultMavenExecutionRequest.copy(wrapperRequest);
    }

    private void printExecutionStartInfoLog(Log log) {
        log.info("////////////////////////////////////////////////");
        log.info(String.format("EMBEDDED EXECUTION REQUESTS - BEGIN"));

        LOG.debug("####################");
        LOG.debug("# GOALS:");
        LOG.debug("####################");

        String goalsInfo = "";
        for (String goal : embeddedRequest.getGoals()) {
            goalsInfo += String.format("\t* %s\n", goal);
        }
        LOG.debug(goalsInfo);

        LOG.debug("####################");
        LOG.debug("# ACTIVE PROFILES:");
        LOG.debug("####################");

        if (embeddedRequest.getActiveProfiles() != null && embeddedRequest.getActiveProfiles().size() > 0) {
            String profilesInfo = "";
            for (String profile : embeddedRequest.getActiveProfiles()) {
                profilesInfo += String.format("\t* %s\n", profile);
            }
            LOG.debug(profilesInfo);
        }

        LOG.debug("####################");
        LOG.debug("# INACTIVE PROFILES:");
        LOG.debug("####################");

        if (embeddedRequest.getInactiveProfiles() != null && embeddedRequest.getInactiveProfiles().size() > 0) {
            String profilesInfo = "";
            for (String profile : embeddedRequest.getInactiveProfiles()) {
                profilesInfo += String.format("\t* %s\n", profile);
            }
            log.debug(profilesInfo);
        }

        LOG.debug("####################");
        LOG.debug("# PROPERTIES:");
        LOG.debug("####################");

        if (embeddedRequest.getUserProperties() != null && embeddedRequest.getUserProperties().size() > 0) {
            String propertiesInfo = "";
            for (Object propName : embeddedRequest.getUserProperties().keySet()) {
                propertiesInfo += String.format("\t* %s=%s\n", propName,
                        embeddedRequest.getUserProperties().get(propName));
            }
            LOG.debug(propertiesInfo);
        }
    }

    private void printExecutionEndInfoLog(Log log) {
        log.info(String.format("EMBEDDED EXECUTION REQUESTS - END"));
        log.info("////////////////////////////////////////////////");
    }

    private void logAndPassOnExceptionIfAny(MavenExecutionResult result, Log log) throws MojoExecutionException {
        if (result.hasExceptions()) {
            log.warn("###################");
            log.warn("The following exceptions occured during execution:");
            for (Throwable t : result.getExceptions()) {
                log.warn("--------");
                log.warn(t);
            }
            log.warn("###################");
            Throwable ex = result.getExceptions().get(0);
            Throwable cause = ex.getCause();
            String errmsg = cause != null ? cause.getMessage() : ex.getMessage();
            throw new MojoExecutionException(
                String.format("%s\nFAIL - see log statements above for additional info", errmsg));
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy