aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java719
1 files changed, 719 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
new file mode 100644
index 00000000..bc2d5554
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
@@ -0,0 +1,719 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * 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.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.plugin.Mojo;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+
+/**
+ * The bean containing the Mojo descriptor.
+ * <br/>
+ * For more information about the usage tag, have a look to:
+ * <a href="http://maven.apache.org/developers/mojo-api-specification.html">
+ * http://maven.apache.org/developers/mojo-api-specification.html</a>
+ *
+ * @todo is there a need for the delegation of MavenMojoDescriptor to this?
+ * Why not just extend ComponentDescriptor here?
+ */
+public class MojoDescriptor
+ extends ComponentDescriptor<Mojo>
+ implements Cloneable
+{
+ /** The Plexus component type */
+ public static final String MAVEN_PLUGIN = "maven-plugin";
+
+ /** "once-per-session" execution strategy */
+ public static final String SINGLE_PASS_EXEC_STRATEGY = "once-per-session";
+
+ /** "always" execution strategy */
+ public static final String MULTI_PASS_EXEC_STRATEGY = "always";
+
+ private static final String DEFAULT_INSTANTIATION_STRATEGY = "per-lookup";
+
+ private static final String DEFAULT_LANGUAGE = "java";
+
+ private List<Parameter> parameters;
+
+ private Map<String, Parameter> parameterMap;
+
+ /** By default, the execution strategy is "once-per-session" */
+ private String executionStrategy = SINGLE_PASS_EXEC_STRATEGY;
+
+ /**
+ * The goal name for the Mojo, that users will reference from the command line to execute the Mojo directly, or
+ * inside a POM in order to provide Mojo-specific configuration.
+ */
+ private String goal;
+
+ /**
+ * Defines a default phase to bind a mojo execution to if the user does not explicitly set a phase in the POM.
+ * <i>Note:</i> This will not automagically make a mojo run when the plugin declaration is added to the POM. It
+ * merely enables the user to omit the <code>&lt;phase&gt;</code> element from the surrounding
+ * <code>&lt;execution&gt;</code> element.
+ */
+ private String phase;
+
+ /** Specify the version when the Mojo was added to the API. Similar to Javadoc since. */
+ private String since;
+
+ /** Reference the invocation phase of the Mojo. */
+ private String executePhase;
+
+ /** Reference the invocation goal of the Mojo. */
+ private String executeGoal;
+
+ /** Reference the invocation lifecycle of the Mojo. */
+ private String executeLifecycle;
+
+ /**
+ * Specify the version when the Mojo was deprecated to the API. Similar to Javadoc deprecated. This will trigger a
+ * warning when a user tries to configure a parameter marked as deprecated.
+ */
+ private String deprecated;
+
+ /**
+ * Flags this Mojo to run it in a multi module way, i.e. aggregate the build with the set of projects listed as
+ * modules. By default, no need to aggregate the Maven project and its child modules
+ */
+ private boolean aggregator = false;
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ /** Specify the required dependencies in a specified scope */
+ private String dependencyResolutionRequired = null;
+
+ /**
+ * The scope of (transitive) dependencies that should be collected but not resolved.
+ * @since 3.0-alpha-3
+ */
+ private String dependencyCollectionRequired;
+
+ /** By default, the Mojo needs a Maven project to be executed */
+ private boolean projectRequired = true;
+
+ /** By default, the Mojo is assumed to work offline as well */
+ private boolean onlineRequired = false;
+
+ /** Plugin configuration */
+ private PlexusConfiguration mojoConfiguration;
+
+ /** Plugin descriptor */
+ private PluginDescriptor pluginDescriptor;
+
+ /** By default, the Mojo is inherited */
+ private boolean inheritedByDefault = true;
+
+ /** By default, the Mojo cannot be invoked directly */
+ private boolean directInvocationOnly = false;
+
+ /** By default, the Mojo don't need reports to run */
+ private boolean requiresReports = false;
+
+ /**
+ * By default, mojos are not threadsafe
+ * @since 3.0-beta-2
+ */
+ private boolean threadSafe = false;
+
+ /**
+ * Default constructor.
+ */
+ public MojoDescriptor()
+ {
+ setInstantiationStrategy( DEFAULT_INSTANTIATION_STRATEGY );
+ setComponentFactory( DEFAULT_LANGUAGE );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ /**
+ * @return the language of this Mojo, i.e. <code>java</code>
+ */
+ public String getLanguage()
+ {
+ return getComponentFactory();
+ }
+
+ /**
+ * @param language the new language
+ */
+ public void setLanguage( String language )
+ {
+ setComponentFactory( language );
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo is deprecated, <code>false</code> otherwise.
+ */
+ public String getDeprecated()
+ {
+ return deprecated;
+ }
+
+ /**
+ * @param deprecated <code>true</code> to deprecate the Mojo, <code>false</code> otherwise.
+ */
+ public void setDeprecated( String deprecated )
+ {
+ this.deprecated = deprecated;
+ }
+
+ /**
+ * @return the list of parameters
+ */
+ public List<Parameter> getParameters()
+ {
+ return parameters;
+ }
+
+ /**
+ * @param parameters the new list of parameters
+ * @throws DuplicateParameterException if any
+ */
+ public void setParameters( List<Parameter> parameters )
+ throws DuplicateParameterException
+ {
+ for ( Parameter parameter : parameters )
+ {
+ addParameter( parameter );
+ }
+ }
+
+ /**
+ * @param parameter add a new parameter
+ * @throws DuplicateParameterException if any
+ */
+ public void addParameter( Parameter parameter )
+ throws DuplicateParameterException
+ {
+ if ( parameters != null && parameters.contains( parameter ) )
+ {
+ throw new DuplicateParameterException( parameter.getName()
+ + " has been declared multiple times in mojo with goal: " + getGoal() + " (implementation: "
+ + getImplementation() + ")" );
+ }
+
+ if ( parameters == null )
+ {
+ parameters = new LinkedList<Parameter>();
+ }
+
+ parameters.add( parameter );
+ }
+
+ /**
+ * @return the list parameters as a Map
+ */
+ public Map<String, Parameter> getParameterMap()
+ {
+ if ( parameterMap == null )
+ {
+ parameterMap = new HashMap<String, Parameter>();
+
+ if ( parameters != null )
+ {
+ for ( Parameter pd : parameters )
+ {
+ parameterMap.put( pd.getName(), pd );
+ }
+ }
+ }
+
+ return parameterMap;
+ }
+
+ // ----------------------------------------------------------------------
+ // Dependency requirement
+ // ----------------------------------------------------------------------
+
+ /**
+ * @param requiresDependencyResolution the new required dependencies in a specified scope
+ */
+ public void setDependencyResolutionRequired( String requiresDependencyResolution )
+ {
+ this.dependencyResolutionRequired = requiresDependencyResolution;
+ }
+
+ public String getDependencyResolutionRequired()
+ {
+ return dependencyResolutionRequired;
+ }
+
+ /**
+ * @return the required dependencies in a specified scope
+ * @TODO the name is not intelligible
+ */
+ @Deprecated
+ public String isDependencyResolutionRequired()
+ {
+ return dependencyResolutionRequired;
+ }
+
+ /**
+ * @since 3.0-alpha-3
+ */
+ public void setDependencyCollectionRequired( String requiresDependencyCollection )
+ {
+ this.dependencyCollectionRequired = requiresDependencyCollection;
+ }
+
+ /**
+ * Gets the scope of (transitive) dependencies that should be collected. Dependency collection refers to the process
+ * of calculating the complete dependency tree in terms of artifact coordinates. In contrast to dependency
+ * resolution, this does not include the download of the files for the dependency artifacts. It is meant for mojos
+ * that only want to analyze the set of transitive dependencies, in particular during early lifecycle phases where
+ * full dependency resolution might fail due to projects which haven't been built yet.
+ *
+ * @return The scope of (transitive) dependencies that should be collected or {@code null} if none.
+ * @since 3.0-alpha-3
+ */
+ public String getDependencyCollectionRequired()
+ {
+ return dependencyCollectionRequired;
+ }
+
+ // ----------------------------------------------------------------------
+ // Project requirement
+ // ----------------------------------------------------------------------
+
+ /**
+ * @param requiresProject <code>true</code> if the Mojo needs a Maven project to be executed, <code>false</code>
+ * otherwise.
+ */
+ public void setProjectRequired( boolean requiresProject )
+ {
+ this.projectRequired = requiresProject;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo needs a Maven project to be executed, <code>false</code> otherwise.
+ */
+ public boolean isProjectRequired()
+ {
+ return projectRequired;
+ }
+
+ // ----------------------------------------------------------------------
+ // Online vs. Offline requirement
+ // ----------------------------------------------------------------------
+
+ /**
+ * @param requiresOnline <code>true</code> if the Mojo is online, <code>false</code> otherwise.
+ */
+ public void setOnlineRequired( boolean requiresOnline )
+ {
+ this.onlineRequired = requiresOnline;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo is online, <code>false</code> otherwise.
+ */
+ // blech! this isn't even intelligible as a method name. provided for
+ // consistency...
+ public boolean isOnlineRequired()
+ {
+ return onlineRequired;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo is online, <code>false</code> otherwise.
+ */
+ // more english-friendly method...keep the code clean! :)
+ public boolean requiresOnline()
+ {
+ return onlineRequired;
+ }
+
+ /**
+ * @return the binded phase name of the Mojo
+ */
+ public String getPhase()
+ {
+ return phase;
+ }
+
+ /**
+ * @param phase the new binded phase name of the Mojo
+ */
+ public void setPhase( String phase )
+ {
+ this.phase = phase;
+ }
+
+ /**
+ * @return the version when the Mojo was added to the API
+ */
+ public String getSince()
+ {
+ return since;
+ }
+
+ /**
+ * @param since the new version when the Mojo was added to the API
+ */
+ public void setSince( String since )
+ {
+ this.since = since;
+ }
+
+ /**
+ * @return The goal name of the Mojo
+ */
+ public String getGoal()
+ {
+ return goal;
+ }
+
+ /**
+ * @param goal The new goal name of the Mojo
+ */
+ public void setGoal( String goal )
+ {
+ this.goal = goal;
+ }
+
+ /**
+ * @return the invocation phase of the Mojo
+ */
+ public String getExecutePhase()
+ {
+ return executePhase;
+ }
+
+ /**
+ * @param executePhase the new invocation phase of the Mojo
+ */
+ public void setExecutePhase( String executePhase )
+ {
+ this.executePhase = executePhase;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo uses <code>always</code> for the <code>executionStrategy</code>
+ */
+ public boolean alwaysExecute()
+ {
+ return MULTI_PASS_EXEC_STRATEGY.equals( executionStrategy );
+ }
+
+ /**
+ * @return the execution strategy
+ */
+ public String getExecutionStrategy()
+ {
+ return executionStrategy;
+ }
+
+ /**
+ * @param executionStrategy the new execution strategy
+ */
+ public void setExecutionStrategy( String executionStrategy )
+ {
+ this.executionStrategy = executionStrategy;
+ }
+
+ /**
+ * @return the mojo configuration
+ */
+ public PlexusConfiguration getMojoConfiguration()
+ {
+ if ( mojoConfiguration == null )
+ {
+ mojoConfiguration = new XmlPlexusConfiguration( "configuration" );
+ }
+ return mojoConfiguration;
+ }
+
+ /**
+ * @param mojoConfiguration a new mojo configuration
+ */
+ public void setMojoConfiguration( PlexusConfiguration mojoConfiguration )
+ {
+ this.mojoConfiguration = mojoConfiguration;
+ }
+
+ /** {@inheritDoc} */
+ public String getRole()
+ {
+ return Mojo.ROLE;
+ }
+
+ /** {@inheritDoc} */
+ public String getRoleHint()
+ {
+ return getId();
+ }
+
+ /**
+ * @return the id of the mojo, based on the goal name
+ */
+ public String getId()
+ {
+ return getPluginDescriptor().getId() + ":" + getGoal();
+ }
+
+ /**
+ * @return the full goal name
+ * @see PluginDescriptor#getGoalPrefix()
+ * @see #getGoal()
+ */
+ public String getFullGoalName()
+ {
+ return getPluginDescriptor().getGoalPrefix() + ":" + getGoal();
+ }
+
+ /** {@inheritDoc} */
+ public String getComponentType()
+ {
+ return MAVEN_PLUGIN;
+ }
+
+ /**
+ * @return the plugin descriptor
+ */
+ public PluginDescriptor getPluginDescriptor()
+ {
+ return pluginDescriptor;
+ }
+
+ /**
+ * @param pluginDescriptor the new plugin descriptor
+ */
+ public void setPluginDescriptor( PluginDescriptor pluginDescriptor )
+ {
+ this.pluginDescriptor = pluginDescriptor;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo is herited, <code>false</code> otherwise.
+ */
+ public boolean isInheritedByDefault()
+ {
+ return inheritedByDefault;
+ }
+
+ /**
+ * @param inheritedByDefault <code>true</code> if the Mojo is herited, <code>false</code> otherwise.
+ */
+ public void setInheritedByDefault( boolean inheritedByDefault )
+ {
+ this.inheritedByDefault = inheritedByDefault;
+ }
+
+ /** {@inheritDoc} */
+ public boolean equals( Object object )
+ {
+ if ( this == object )
+ {
+ return true;
+ }
+
+ if ( object instanceof MojoDescriptor )
+ {
+ MojoDescriptor other = (MojoDescriptor) object;
+
+ if ( !compareObjects( getPluginDescriptor(), other.getPluginDescriptor() ) )
+ {
+ return false;
+ }
+
+ return compareObjects( getGoal(), other.getGoal() );
+
+ }
+
+ return false;
+ }
+
+ private boolean compareObjects( Object first, Object second )
+ {
+ if ( first == second )
+ {
+ return true;
+ }
+
+ if ( first == null || second == null )
+ {
+ return false;
+ }
+
+ return first.equals( second );
+ }
+
+ /** {@inheritDoc} */
+ public int hashCode()
+ {
+ int result = 1;
+
+ String goal = getGoal();
+
+ if ( goal != null )
+ {
+ result += goal.hashCode();
+ }
+
+ PluginDescriptor pd = getPluginDescriptor();
+
+ if ( pd != null )
+ {
+ result -= pd.hashCode();
+ }
+
+ return result;
+ }
+
+ /**
+ * @return the invocation lifecycle of the Mojo
+ */
+ public String getExecuteLifecycle()
+ {
+ return executeLifecycle;
+ }
+
+ /**
+ * @param executeLifecycle the new invocation lifecycle of the Mojo
+ */
+ public void setExecuteLifecycle( String executeLifecycle )
+ {
+ this.executeLifecycle = executeLifecycle;
+ }
+
+ /**
+ * @param aggregator <code>true</code> if the Mojo uses the Maven project and its child modules,
+ * <code>false</code> otherwise.
+ */
+ public void setAggregator( boolean aggregator )
+ {
+ this.aggregator = aggregator;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo uses the Maven project and its child modules,
+ * <code>false</code> otherwise.
+ */
+ public boolean isAggregator()
+ {
+ return aggregator;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo cannot be invoked directly, <code>false</code> otherwise.
+ */
+ public boolean isDirectInvocationOnly()
+ {
+ return directInvocationOnly;
+ }
+
+ /**
+ * @param directInvocationOnly <code>true</code> if the Mojo cannot be invoked directly,
+ * <code>false</code> otherwise.
+ */
+ public void setDirectInvocationOnly( boolean directInvocationOnly )
+ {
+ this.directInvocationOnly = directInvocationOnly;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo needs reports to run, <code>false</code> otherwise.
+ */
+ public boolean isRequiresReports()
+ {
+ return requiresReports;
+ }
+
+ /**
+ * @param requiresReports <code>true</code> if the Mojo needs reports to run, <code>false</code> otherwise.
+ */
+ public void setRequiresReports( boolean requiresReports )
+ {
+ this.requiresReports = requiresReports;
+ }
+
+ /**
+ * @param executeGoal the new invocation goal of the Mojo
+ */
+ public void setExecuteGoal( String executeGoal )
+ {
+ this.executeGoal = executeGoal;
+ }
+
+ /**
+ * @return the invocation goal of the Mojo
+ */
+ public String getExecuteGoal()
+ {
+ return executeGoal;
+ }
+
+
+ /**
+ * @return True if the <code>Mojo</code> is thread-safe and can be run safely in parallel
+ * @since 3.0-beta-2
+ */
+ public boolean isThreadSafe()
+ {
+ return threadSafe;
+ }
+
+ /**
+ * @param threadSafe indicates that the mojo is thread-safe and can be run safely in parallel
+ * @since 3.0-beta-2
+ */
+ public void setThreadSafe( boolean threadSafe )
+ {
+ this.threadSafe = threadSafe;
+ }
+
+ /**
+ * @return {@code true} if this mojo forks either a goal or the lifecycle, {@code false} otherwise.
+ */
+ public boolean isForking()
+ {
+ return ( getExecuteGoal() != null && getExecuteGoal().length() > 0 )
+ || ( getExecutePhase() != null && getExecutePhase().length() > 0 );
+ }
+
+ /**
+ * Creates a shallow copy of this mojo descriptor.
+ */
+ @Override
+ public MojoDescriptor clone()
+ {
+ try
+ {
+ return (MojoDescriptor) super.clone();
+ }
+ catch ( CloneNotSupportedException e )
+ {
+ throw new UnsupportedOperationException( e );
+ }
+ }
+
+}