/* * Copyright 2014 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.gmavenplus.mojo; import org.apache.maven.project.MavenProjectHelper; import java.lang.reflect.InvocationTargetException; import java.util.Properties; import static org.codehaus.gmavenplus.util.ReflectionUtils.findConstructor; import static org.codehaus.gmavenplus.util.ReflectionUtils.invokeConstructor; /** * The base tools mojo, which all tool mojos extend. * Note that it references the plugin classloader to pull in dependencies * Groovy didn't include (for things like Ant for AntBuilder, Ivy for @grab, * and Jansi for Groovysh). * * @author Keegan Witt * @since 1.1 */ public abstract class AbstractToolsMojo extends AbstractGroovyMojo { /** * Maven ProjectHelper to use in properties. * @since 1.3 * * @component * @readonly * */ protected MavenProjectHelper projectHelper; /** * Properties to make available in scripts as variables using the property * name. By default will include * <dl> * <dt>project</dt> * <dd>A org.apache.maven.project.Project object of the current Maven project.</dd> * <dt>session</dt> * <dd>A org.apache.maven.execution.MavenSession object of the current Maven session.</dd> * <dt>pluginArtifacts</dt> * <dd>A list of org.apache.maven.artifact.Artifact objects of this plugin's artifacts.</dd> * <dt>mojoExecution</dt> * <dd>A org.apache.maven.plugin.MojoExecution object of this plugin's mojo execution.</dd> * <dt>log</dt> * <dd>A org.apache.maven.plugin.logging.Log object of Maven's log.</dd> * <dt>ant</dt> * <dd>A groovy.util.AntBuilder object.</dd> * </dl> * These can be overridden. * @since 1.0-beta-3 * * @parameter */ protected Properties properties = new Properties(); /** * Whether to allow System.exit() to be used. * @since 1.2 * * @parameter default-value="false" */ protected boolean allowSystemExits; /** * Whether to bind each property to a separate variable (otherwise binds * properties to a single 'properties' variable). * @since 1.2 * * @parameter default-value="true" */ protected boolean bindPropertiesToSeparateVariables; /** * Initializes the properties field. */ protected void initializeProperties() { if (project != null && !properties.containsKey("project")) { properties.put("project", project); } if (session != null && !properties.containsKey("session")) { properties.put("session", session); } if (pluginArtifacts != null && !properties.containsKey("pluginArtifacts")) { properties.put("pluginArtifacts", pluginArtifacts); } if (mojoExecution != null && !properties.containsKey("mojoExecution")) { properties.put("mojoExecution", mojoExecution); } if (!properties.containsKey("log")) { properties.put("log", getLog()); } if (projectHelper != null && !properties.containsKey("projectHelper")) { properties.put("projectHelper", projectHelper); } if (!properties.containsKey("ant")) { try { Object antBuilder = invokeConstructor(findConstructor(classWrangler.getClass("groovy.util.AntBuilder"))); properties.put("ant", antBuilder); } catch (InvocationTargetException e) { logUnableToInitializeAntBuilder(e); } catch (IllegalAccessException e) { logUnableToInitializeAntBuilder(e); } catch (InstantiationException e) { logUnableToInitializeAntBuilder(e); } catch (ClassNotFoundException e) { logUnableToInitializeAntBuilder(e); } } } /** * Logs errors that caused the 'ant' object to not be populated. * @param e the exception causing the failure */ protected void logUnableToInitializeAntBuilder(final Throwable e) { getLog().error("Unable to initialize 'ant' with a new AntBuilder object. Is Groovy a dependency? If you are using Groovy >= 2.3.0-rc-1, remember to include groovy-ant as a dependency.", e); } }