package com.googlecode.mycontainer.maven.plugin; /* * 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. */ import java.io.File; import java.util.List; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.cli.CommandLineUtils; /** * This class is used for unifying functionality between the 2 mojo exec plugins * ('java' and 'exec'). It handles parsing the arguments and adding source/test * folders. * * @author Philippe Jacot (PJA) * @author Jerome Lacoste */ public abstract class AbstractExecMojo extends AbstractMojo { /** * The enclosing project. * * @parameter expression="${project}" * @required * @readonly */ protected MavenProject project; /** * This folder is added to the list of those folders containing source to be * compiled. Use this if your plugin generates source code. * * @parameter expression="${sourceRoot}" */ private File sourceRoot; /** * This folder is added to the list of those folders containing source to be * compiled for testing. Use this if your plugin generates test source code. * * @parameter expression="${testSourceRoot}" */ private File testSourceRoot; /** * Arguments for the executed program * * @parameter expression="${exec.args}" */ private String commandlineArgs; /** * Defines the scope of the classpath passed to the plugin. Set to * compile,test,runtime or system depending on your needs. Since 1.1.2, the * default value is 'runtime' instead of 'compile'. * * @parameter expression="${exec.classpathScope}" default-value="runtime" */ protected String classpathScope; /** * Skip the execution. * * @parameter expression="${skip}" default-value="false" * @since 1.0.1 */ private boolean skip; /** * @parameter expression="${plugin.artifacts}" * @readonly */ private List pluginDependencies; /** * Collects the project artifacts in the specified List and the project * specific classpath (build output and build test output) Files in the * specified List, depending on the plugin classpathScope value. * * @param artifacts * the list where to collect the scope specific artifacts * @param theClasspathFiles * the list where to collect the scope specific output * directories */ protected void collectProjectArtifactsAndClasspath(List artifacts, List theClasspathFiles) { if ("compile".equals(classpathScope)) { artifacts.addAll(project.getCompileArtifacts()); theClasspathFiles.add(new File(project.getBuild() .getOutputDirectory())); } else if ("test".equals(classpathScope)) { artifacts.addAll(project.getTestArtifacts()); theClasspathFiles.add(new File(project.getBuild() .getTestOutputDirectory())); theClasspathFiles.add(new File(project.getBuild() .getOutputDirectory())); } else if ("runtime".equals(classpathScope)) { artifacts.addAll(project.getRuntimeArtifacts()); theClasspathFiles.add(new File(project.getBuild() .getOutputDirectory())); } else if ("system".equals(classpathScope)) { artifacts.addAll(project.getSystemArtifacts()); } else { throw new IllegalStateException("Invalid classpath scope: " + classpathScope); } artifacts.addAll(this.pluginDependencies); getLog().debug("Collected project artifacts " + artifacts); getLog().debug("Collected project classpath " + theClasspathFiles); } /** * Parses the argument string given by the user. Strings are recognized as * everything between STRING_WRAPPER. PARAMETER_DELIMITER is ignored inside * a string. STRING_WRAPPER and PARAMETER_DELIMITER can be escaped using * ESCAPE_CHAR. * * @return Array of String representing the arguments * @throws MojoExecutionException * for wrong formatted arguments */ protected String[] parseCommandlineArgs() throws MojoExecutionException { if (commandlineArgs == null) { return null; } else { try { return CommandLineUtils.translateCommandline(commandlineArgs); } catch (Exception e) { throw new MojoExecutionException(e.getMessage()); } } } /** * @return true of the mojo has command line arguments */ protected boolean hasCommandlineArgs() { return (commandlineArgs != null); } /** * Register compile and compile tests source roots if necessary */ protected void registerSourceRoots() { if (sourceRoot != null) { getLog().info("Registering compile source root " + sourceRoot); project.addCompileSourceRoot(sourceRoot.toString()); } if (testSourceRoot != null) { getLog().info( "Registering compile test source root " + testSourceRoot); project.addTestCompileSourceRoot(testSourceRoot.toString()); } } /** * Check if the execution should be skipped * * @return true to skip */ protected boolean isSkip() { return skip; } }