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

org.apache.maven.shared.invoker.DefaultInvoker Maven / Gradle / Ivy

The newest version!
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF 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.apache.maven.shared.invoker;

import javax.inject.Named;
import javax.inject.Singleton;

import java.io.File;
import java.io.InputStream;

import org.apache.maven.shared.utils.cli.CommandLineException;
import org.apache.maven.shared.utils.cli.CommandLineUtils;
import org.apache.maven.shared.utils.cli.Commandline;

/**
 * Class intended to be used by clients who wish to invoke a forked Maven process from their applications
 *
 * @author jdcasey
 */
@Named
@Singleton
public class DefaultInvoker implements Invoker {
    /** Constant ROLE_HINT="default" */
    public static final String ROLE_HINT = "default";

    private static final InvokerLogger DEFAULT_LOGGER = new SystemOutLogger();

    private static final InvocationOutputHandler DEFAULT_OUTPUT_HANDLER = new SystemOutHandler();

    private File localRepositoryDirectory;

    private InvokerLogger logger = DEFAULT_LOGGER;

    private File workingDirectory;

    private File mavenHome;

    private File mavenExecutable;

    private InvocationOutputHandler outputHandler = DEFAULT_OUTPUT_HANDLER;

    private InputStream inputStream;

    private InvocationOutputHandler errorHandler = DEFAULT_OUTPUT_HANDLER;

    /** {@inheritDoc} */
    public InvocationResult execute(InvocationRequest request) throws MavenInvocationException {
        MavenCommandLineBuilder cliBuilder = new MavenCommandLineBuilder();

        if (logger != null) {
            cliBuilder.setLogger(logger);
        }

        if (localRepositoryDirectory != null) {
            cliBuilder.setLocalRepositoryDirectory(localRepositoryDirectory);
        }

        if (mavenHome != null) {
            cliBuilder.setMavenHome(mavenHome);
        }

        if (mavenExecutable != null) {
            cliBuilder.setMavenExecutable(mavenExecutable);
        }

        if (workingDirectory != null) {
            cliBuilder.setBaseDirectory(workingDirectory);
        }

        Commandline cli;

        try {
            cli = cliBuilder.build(request);
        } catch (CommandLineConfigurationException e) {
            throw new MavenInvocationException("Error configuring command line", e);
        }

        DefaultInvocationResult result = new DefaultInvocationResult();

        try {
            int exitCode = executeCommandLine(cli, request, request.getTimeoutInSeconds());

            result.setExitCode(exitCode);
        } catch (CommandLineException e) {
            result.setExecutionException(e);
        }

        return result;
    }

    private int executeCommandLine(Commandline cli, InvocationRequest request, int timeoutInSeconds)
            throws CommandLineException {
        int result;

        InputStream inputStream = request.getInputStream(this.inputStream);
        InvocationOutputHandler outputHandler = request.getOutputHandler(this.outputHandler);
        InvocationOutputHandler errorHandler = request.getErrorHandler(this.errorHandler);

        if (getLogger().isDebugEnabled()) {
            getLogger().debug("Executing: " + cli);
        }

        if (request.isBatchMode()) {
            if (inputStream != null) {
                getLogger().info("Executing in batch mode. The configured input stream will be ignored.");
            }

            result = CommandLineUtils.executeCommandLine(cli, outputHandler, errorHandler, timeoutInSeconds);
        } else {
            if (inputStream == null) {
                getLogger()
                        .warn("Maven will be executed in interactive mode"
                                + ", but no input stream has been configured for this MavenInvoker instance.");

                result = CommandLineUtils.executeCommandLine(cli, outputHandler, errorHandler, timeoutInSeconds);
            } else {
                result = CommandLineUtils.executeCommandLine(
                        cli, inputStream, outputHandler, errorHandler, timeoutInSeconds);
            }
        }

        return result;
    }

    /**
     * 

Getter for the field localRepositoryDirectory.

* * @return a {@link java.io.File} object. */ public File getLocalRepositoryDirectory() { return localRepositoryDirectory; } /** *

Getter for the field logger.

* * @return a {@link org.apache.maven.shared.invoker.InvokerLogger} object. */ public InvokerLogger getLogger() { return logger; } /** {@inheritDoc} */ public Invoker setLocalRepositoryDirectory(File localRepositoryDirectory) { this.localRepositoryDirectory = localRepositoryDirectory; return this; } /** {@inheritDoc} */ public Invoker setLogger(InvokerLogger logger) { this.logger = (logger != null) ? logger : DEFAULT_LOGGER; return this; } /** *

Getter for the field workingDirectory.

* * @return a {@link java.io.File} object. */ public File getWorkingDirectory() { return workingDirectory; } /** {@inheritDoc} */ public Invoker setWorkingDirectory(File workingDirectory) { this.workingDirectory = workingDirectory; return this; } /** *

Getter for the field mavenHome.

* * @return a {@link java.io.File} object. */ public File getMavenHome() { return mavenHome; } /** {@inheritDoc} */ public Invoker setMavenHome(File mavenHome) { this.mavenHome = mavenHome; return this; } /** *

Getter for the field mavenExecutable.

* * @return a {@link java.io.File} object. */ public File getMavenExecutable() { return mavenExecutable; } /** {@inheritDoc} */ public Invoker setMavenExecutable(File mavenExecutable) { this.mavenExecutable = mavenExecutable; return this; } /** {@inheritDoc} */ public Invoker setErrorHandler(InvocationOutputHandler errorHandler) { this.errorHandler = errorHandler; return this; } /** {@inheritDoc} */ public Invoker setInputStream(InputStream inputStream) { this.inputStream = inputStream; return this; } /** {@inheritDoc} */ public Invoker setOutputHandler(InvocationOutputHandler outputHandler) { this.outputHandler = outputHandler; return this; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy