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

org.codehaus.gmaven.plugin.tools.ShellMojo Maven / Gradle / Ivy

/*
 * Copyright (C) 2006-2007 the original author or authors.
 *
 * 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.gmaven.plugin.tools;

import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.codehaus.gmaven.feature.Component;
import org.codehaus.gmaven.feature.Configuration;
import org.codehaus.gmaven.plugin.ComponentMojoSupport;
import org.codehaus.gmaven.runtime.Shell;
import org.codehaus.gmaven.runtime.loader.realm.RealmManager;
import org.codehaus.plexus.classworlds.realm.ClassRealm;

import java.util.List;

/**
 * Launches the Groovy Shell (aka. groovysh).
 *
 * @goal shell
 * @requiresProject false
 * @requiresDependencyResolution test
 * @since 1.0-beta-2
 * 
 * @version $Id$
 * @author Jason Dillon
 */
public class ShellMojo
    extends ComponentMojoSupport
{
    /**
     * Enable the legacy shell.
     *
     * @parameter expression="${legacy}" default-value="false"
     *
     * @noinspection UnusedDeclaration
     */
    private boolean legacy;

    /**
     * Enable verbose output (aka. groovysh --verbose).
     *
     * @parameter expression="${verbose}" default-value="false"
     *
     * @noinspection UnusedDeclaration
     */
    private boolean verbose;

    /**
     * Enable debug output (aka. groovysh --debug).
     *
     * @parameter expression="${debug}" default-value="false"
     *
     * @noinspection UnusedDeclaration
     */
    private boolean debug;

    /**
     * Suppress superfluous output (aka. groovysh --quiet).
     *
     * @parameter expression="${quiet}" default-value="false"
     *
     * @noinspection UnusedDeclaration
     */
    private boolean quiet;

    /**
     * Enable or disable use of ANSI colors (aka. groovysh --color).  Normally auto-detected.
     *
     * @parameter expression="${color}"
     *
     * @noinspection UnusedDeclaration
     */
    private Boolean color;

    /**
     * Specify the terminal type to use (aka. groovysh --terminal).  Normally auto-detected.
     * Full class name or one of "unix", "win", "windows", "false", "off" or "none" expected.
     *
     * @parameter expression="${terminal}"
     *
     * @noinspection UnusedDeclaration
     */
    private String terminal;

    /**
     * Optional arguments to pass to the shell when executing.
     *
     * @parameter expression="${args}"
     *
     * @noinspection UnusedDeclaration
     */
    private String args;

    /**
     * @component
     *
     * @noinspection UnusedDeclaration
     */
    private RealmManager realmManager;

    public ShellMojo() {
        super(Shell.KEY);
    }

    protected List getProjectClasspathElements() throws DependencyResolutionRequiredException {
        return project.getTestClasspathElements();
    }

    protected void configure(final Configuration config) throws Exception {
        assert config != null;

        config.set(Shell.Keys.LEGACY, legacy);

        if (!legacy) {
            config.set(Shell.Keys.VERBOSE, verbose);
            config.set(Shell.Keys.DEBUG, debug);
            config.set(Shell.Keys.QUIET, quiet);
            config.set(Shell.Keys.COLOR, color);
            config.set(Shell.Keys.TERMINAL, terminal);
            config.set(Shell.Keys.ARGS, args);
        }
    }

    protected void process(final Component component) throws Exception {
        assert component != null;

        Shell shell = (Shell) component;

        ClassRealm realm = realmManager.createComponentRealm(provider(), createClassPath());

        shell.execute(realm);

        realmManager.releaseComponentRealm(realm);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy