/* * Copyright (C) 2011 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.artifact.Artifact; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.project.MavenProject; import org.codehaus.gmavenplus.model.Version; import org.codehaus.gmavenplus.util.ClassWrangler; import java.io.File; import java.util.List; /** * The base mojo class, which all other mojos extend. * * @author Keegan Witt * @since 1.0-beta-1 */ public abstract class AbstractGroovyMojo extends AbstractMojo { /** * The pattern defining Groovy files. */ protected static final String GROOVY_SOURCES_PATTERN = "**" + File.separator + "*.groovy"; /** * The pattern defining Java stub files. */ protected static final String JAVA_SOURCES_PATTERN = "**" + File.separator + "*.java"; /** * Java 1.7 version. */ protected static final Version JAVA_1_7 = new Version(1, 7); /** * Groovy 1.5.0 version. */ protected static final Version GROOVY_1_5_0 = new Version(1, 5, 0); /** * The wrangler to use to work with Groovy classes, classpaths, classLoaders, and versions. */ protected ClassWrangler classWrangler; // note that all supported parameter expressions can be found here: https://git-wip-us.apache.org/repos/asf?p=maven.git;a=blob;f=maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java;hb=HEAD /** * The Maven project this plugin is being used on. * * @parameter property="project" * @required * @readonly */ protected MavenProject project; /** * The Maven Session this plugin is being used on. * * @parameter property="session" * @required * @readonly */ protected MavenSession session; /** * The plugin dependencies. * * @parameter property="plugin.artifacts" * @required * @readonly */ protected List<Artifact> pluginArtifacts; /** * The plugin's mojo execution. * * @parameter property="mojoExecution" * @required * @readonly */ protected MojoExecution mojoExecution; /** * The minimum version of Groovy that this mojo supports (1.5.0 by * default, but other mojos can override). */ protected Version minGroovyVersion = GROOVY_1_5_0; /** * Flag to allow test compilation to be skipped. * * @parameter property="maven.test.skip" default-value="false" */ protected boolean skipTests; /** * Logs the plugin classpath. */ protected void logPluginClasspath() { if (getLog().isDebugEnabled()) { StringBuilder sb = new StringBuilder(); for (Artifact artifact : pluginArtifacts) { sb.append(artifact.getFile()); } getLog().debug("Plugin classpath:\n" + sb.toString()); } } /** * Determines whether the version of Java executing this mojo supports invokedynamic (is at least 1.7). * * @return <code>true</code> if the running Java supports invokedynamic, <code>false</code> otherwise */ protected boolean isJavaSupportIndy() { return getJavaVersion().compareTo(JAVA_1_7, false) >= 0; } /** * Gets the version of Java executing this mojo as a Version object. * * @return a Version object of the running Java version */ protected Version getJavaVersion() { return Version.parseFromString(getJavaVersionString()); } /** * Gets the version of Java executing this mojo as a String. * * @return a String of the running Java version */ protected String getJavaVersionString() { return System.getProperty("java.version"); } /** * Determines whether this mojo can be run with the version of Groovy supplied. * * @return <code>true</code> only if the version of Groovy supports this mojo. */ protected boolean groovyVersionSupportsAction() { return classWrangler.getGroovyVersion() != null && groovyAtLeast(minGroovyVersion); } /** * Determines whether the detected Groovy version is the specified version * or newer. * * @param version the version to compare the detected Groovy version to * @return <code>true</code> if the detected Groovy version is the specified version or newer, <code>false</code> otherwise */ protected boolean groovyAtLeast(Version version) { return ClassWrangler.groovyAtLeast(classWrangler.getGroovyVersion(), version); } /** * Determines whether the detected Groovy version is the specified version. * * @param version the version to compare the detected Groovy version to * @return <code>true</code> if the detected Groovy version is the specified version, <code>false</code> otherwise */ protected boolean groovyIs(Version version) { return ClassWrangler.groovyIs(classWrangler.getGroovyVersion(), version); } /** * Determines whether the detected Groovy version is * newer than the specified version. * * @param version the version to compare the detected Groovy version to * @return <code>true</code> if the detected Groovy version is newer than the specified version, <code>false</code> otherwise */ protected boolean groovyNewerThan(Version version) { return ClassWrangler.groovyNewerThan(classWrangler.getGroovyVersion(), version); } /** * Determines whether the detected Groovy version is * older than the specified version. * * @param version the version to compare the detected Groovy version to * @return <code>true</code> if the detected Groovy version is older than the specified version, <code>false</code> otherwise */ protected boolean groovyOlderThan(Version version) { return ClassWrangler.groovyOlderThan(classWrangler.getGroovyVersion(), version); } }