o merged into maven-plugin-api

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@573122 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jason van Zyl 2007-09-06 00:44:15 +00:00
parent f3b1c5b670
commit a638f1888e
12 changed files with 0 additions and 1763 deletions

View File

@ -1,31 +0,0 @@
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.
*/
public class DuplicateMojoDescriptorException
extends InvalidPluginDescriptorException
{
public DuplicateMojoDescriptorException( String goalPrefix, String goal, String existingImplementation, String newImplementation )
{
super( "Goal: " + goal + " already exists in the plugin descriptor for prefix: " + goalPrefix + "\nExisting implementation is: " + existingImplementation + "\nConflicting implementation is: " + newImplementation );
}
}

View File

@ -1,31 +0,0 @@
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.
*/
public class DuplicateParameterException
extends InvalidPluginDescriptorException
{
public DuplicateParameterException( String message )
{
super( message );
}
}

View File

@ -1,39 +0,0 @@
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.
*/
/**
* @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
* @version $Id: InvalidParameterException.java,v 1.1 2005/02/20 16:25:21
* jdcasey Exp $
*/
public class InvalidParameterException
extends InvalidPluginDescriptorException
{
public InvalidParameterException( String element, int i )
{
super( "The " + element + " element in parameter # " + i + " is invalid. It cannot be null." );
}
public InvalidParameterException( String message, Throwable cause )
{
super( message, cause );
}
}

View File

@ -1,38 +0,0 @@
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 org.codehaus.plexus.configuration.PlexusConfigurationException;
public class InvalidPluginDescriptorException
extends PlexusConfigurationException
{
public InvalidPluginDescriptorException( String message, Throwable cause )
{
super( message, cause );
}
public InvalidPluginDescriptorException( String message )
{
super( message );
}
}

View File

@ -1,455 +0,0 @@
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 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;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* The bean containing the mojo descriptor.
*
* @todo is there a need for the delegation of MavenMojoDescriptor to this? Why not just extend ComponentDescriptor here?
*/
public class MojoDescriptor
extends ComponentDescriptor
implements Cloneable
{
public static String MAVEN_PLUGIN = "maven-plugin";
public static final String SINGLE_PASS_EXEC_STRATEGY = "once-per-session";
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 parameters;
private Map parameterMap;
private String executionStrategy = SINGLE_PASS_EXEC_STRATEGY;
private String goal;
private String phase;
private String since;
private String executePhase;
private String executeGoal;
private String executeLifecycle;
private String deprecated;
private boolean aggregator = false;
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
private String dependencyResolutionRequired = null;
private boolean projectRequired = true;
private boolean onlineRequired = false;
private PlexusConfiguration mojoConfiguration;
private PluginDescriptor pluginDescriptor;
private boolean inheritedByDefault = true;
private boolean directInvocationOnly = false;
private boolean requiresReports = false;
public MojoDescriptor()
{
setInstantiationStrategy( DEFAULT_INSTANTIATION_STRATEGY );
setComponentFactory( DEFAULT_LANGUAGE );
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
public String getLanguage()
{
return getComponentFactory();
}
public void setLanguage( String language )
{
setComponentFactory( language );
}
public String getDeprecated()
{
return deprecated;
}
public void setDeprecated( String deprecated )
{
this.deprecated = deprecated;
}
public List getParameters()
{
return parameters;
}
public void setParameters( List parameters )
throws DuplicateParameterException
{
for ( Iterator it = parameters.iterator(); it.hasNext(); )
{
Parameter parameter = (Parameter) it.next();
addParameter( parameter );
}
}
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() + ")" );
}
else
{
if ( parameters == null )
{
parameters = new LinkedList();
}
parameters.add( parameter );
}
}
public Map getParameterMap()
{
if ( parameterMap == null )
{
parameterMap = new HashMap();
if ( parameters != null )
{
for ( Iterator iterator = parameters.iterator(); iterator.hasNext(); )
{
Parameter pd = (Parameter) iterator.next();
parameterMap.put( pd.getName(), pd );
}
}
}
return parameterMap;
}
// ----------------------------------------------------------------------
// Dependency requirement
// ----------------------------------------------------------------------
public void setDependencyResolutionRequired( String requiresDependencyResolution )
{
this.dependencyResolutionRequired = requiresDependencyResolution;
}
public String isDependencyResolutionRequired()
{
return dependencyResolutionRequired;
}
// ----------------------------------------------------------------------
// Project requirement
// ----------------------------------------------------------------------
public void setProjectRequired( boolean requiresProject )
{
this.projectRequired = requiresProject;
}
public boolean isProjectRequired()
{
return projectRequired;
}
// ----------------------------------------------------------------------
// Online vs. Offline requirement
// ----------------------------------------------------------------------
public void setOnlineRequired( boolean requiresOnline )
{
this.onlineRequired = requiresOnline;
}
// blech! this isn't even intelligible as a method name. provided for
// consistency...
public boolean isOnlineRequired()
{
return onlineRequired;
}
// more english-friendly method...keep the code clean! :)
public boolean requiresOnline()
{
return onlineRequired;
}
public String getPhase()
{
return phase;
}
public void setPhase( String phase )
{
this.phase = phase;
}
public String getSince()
{
return since;
}
public void setSince( String since )
{
this.since = since;
}
public String getGoal()
{
return goal;
}
public void setGoal( String goal )
{
this.goal = goal;
}
public String getExecutePhase()
{
return executePhase;
}
public void setExecutePhase( String executePhase )
{
this.executePhase = executePhase;
}
public boolean alwaysExecute()
{
return MULTI_PASS_EXEC_STRATEGY.equals( executionStrategy );
}
public String getExecutionStrategy()
{
return executionStrategy;
}
public void setExecutionStrategy( String executionStrategy )
{
this.executionStrategy = executionStrategy;
}
public PlexusConfiguration getMojoConfiguration()
{
if ( mojoConfiguration == null )
{
mojoConfiguration = new XmlPlexusConfiguration( "configuration" );
}
return mojoConfiguration;
}
public void setMojoConfiguration( PlexusConfiguration mojoConfiguration )
{
this.mojoConfiguration = mojoConfiguration;
}
public String getRole()
{
return Mojo.ROLE;
}
public String getRoleHint()
{
return getId();
}
public String getId()
{
return getPluginDescriptor().getId() + ":" + getGoal();
}
public String getFullGoalName()
{
return getPluginDescriptor().getGoalPrefix() + ":" + getGoal();
}
public String getComponentType()
{
return MAVEN_PLUGIN;
}
public PluginDescriptor getPluginDescriptor()
{
return pluginDescriptor;
}
public void setPluginDescriptor( PluginDescriptor pluginDescriptor )
{
this.pluginDescriptor = pluginDescriptor;
}
public boolean isInheritedByDefault()
{
return inheritedByDefault;
}
public void setInheritedByDefault( boolean inheritedByDefault )
{
this.inheritedByDefault = inheritedByDefault;
}
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;
}
if ( !compareObjects( getGoal(), other.getGoal() ) )
{
return false;
}
return true;
}
return false;
}
private boolean compareObjects( Object first, Object second )
{
if ( ( first == null && second != null ) || ( first != null && second == null ) )
{
return false;
}
if ( !first.equals( second ) )
{
return false;
}
return true;
}
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;
}
public String getExecuteLifecycle()
{
return executeLifecycle;
}
public void setExecuteLifecycle( String executeLifecycle )
{
this.executeLifecycle = executeLifecycle;
}
public void setAggregator( boolean aggregator )
{
this.aggregator = aggregator;
}
public boolean isAggregator()
{
return aggregator;
}
public boolean isDirectInvocationOnly()
{
return directInvocationOnly;
}
public void setDirectInvocationOnly( boolean directInvocationOnly )
{
this.directInvocationOnly = directInvocationOnly;
}
public boolean isRequiresReports()
{
return requiresReports;
}
public void setRequiresReports( boolean requiresReports )
{
this.requiresReports = requiresReports;
}
public void setExecuteGoal( String executeGoal )
{
this.executeGoal = executeGoal;
}
public String getExecuteGoal()
{
return executeGoal;
}
}

View File

@ -1,190 +0,0 @@
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.
*/
/**
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
* @version $Id$
*/
public class Parameter
{
private String alias;
private String name;
private String type;
private boolean required;
private boolean editable = true;
private String description;
private String expression;
private String deprecated;
private String defaultValue;
private String implementation;
private Requirement requirement;
private String since;
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
public String getName()
{
return name;
}
public void setName( String name )
{
this.name = name;
}
public String getType()
{
return type;
}
public void setType( String type )
{
this.type = type;
}
public boolean isRequired()
{
return required;
}
public void setRequired( boolean required )
{
this.required = required;
}
public String getDescription()
{
return description;
}
public void setDescription( String description )
{
this.description = description;
}
public String getExpression()
{
return expression;
}
public void setExpression( String expression )
{
this.expression = expression;
}
public String getDeprecated()
{
return deprecated;
}
public void setDeprecated( String deprecated )
{
this.deprecated = deprecated;
}
public int hashCode()
{
return name.hashCode();
}
public boolean equals( Object other )
{
return ( other instanceof Parameter ) && getName().equals( ( (Parameter) other ).getName() );
}
public String getAlias()
{
return alias;
}
public void setAlias( String alias )
{
this.alias = alias;
}
public boolean isEditable()
{
return editable;
}
public void setEditable( boolean editable )
{
this.editable = editable;
}
public void setDefaultValue( String defaultValue )
{
this.defaultValue = defaultValue;
}
public String getDefaultValue()
{
return defaultValue;
}
public String toString()
{
return "Mojo parameter [name: \'" + getName() + "\'; alias: \'" + getAlias() + "\']";
}
public Requirement getRequirement()
{
return requirement;
}
public void setRequirement( Requirement requirement )
{
this.requirement = requirement;
}
public String getImplementation()
{
return implementation;
}
public void setImplementation( String implementation )
{
this.implementation = implementation;
}
public String getSince()
{
return since;
}
public void setSince( String since )
{
this.since = since;
}
}

View File

@ -1,362 +0,0 @@
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 org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.plugin.lifecycle.Lifecycle;
import org.apache.maven.plugin.lifecycle.LifecycleConfiguration;
import org.apache.maven.plugin.lifecycle.io.xpp3.LifecycleMappingsXpp3Reader;
import org.codehaus.plexus.classworlds.realm.ClassRealm;
import org.codehaus.plexus.component.repository.ComponentSetDescriptor;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
* @version $Id$
*/
public class PluginDescriptor
extends ComponentSetDescriptor
{
private String groupId;
private String artifactId;
private String version;
private String goalPrefix;
private String source;
private boolean inheritedByDefault = true;
private List artifacts;
private Map lifecycleMappings;
private ClassRealm classRealm;
// calculated on-demand.
private Map artifactMap;
private Set introducedDependencyArtifacts;
private String name;
private String description;
private Artifact pluginArtifact;
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
public List getMojos()
{
return getComponents();
}
public void addMojo( MojoDescriptor mojoDescriptor )
throws DuplicateMojoDescriptorException
{
MojoDescriptor existing = null;
// this relies heavily on the equals() and hashCode() for ComponentDescriptor,
// which uses role:roleHint for identity...and roleHint == goalPrefix:goal.
// role does not vary for Mojos.
List mojos = getComponents();
if ( mojos != null && mojos.contains( mojoDescriptor ) )
{
int indexOf = mojos.indexOf( mojoDescriptor );
existing = (MojoDescriptor) mojos.get( indexOf );
}
if ( existing != null )
{
throw new DuplicateMojoDescriptorException( getGoalPrefix(), mojoDescriptor.getGoal(), existing
.getImplementation(), mojoDescriptor.getImplementation() );
}
else
{
addComponentDescriptor( mojoDescriptor );
}
}
public String getGroupId()
{
return groupId;
}
public void setGroupId( String groupId )
{
this.groupId = groupId;
}
public String getArtifactId()
{
return artifactId;
}
public void setArtifactId( String artifactId )
{
this.artifactId = artifactId;
}
// ----------------------------------------------------------------------
// Dependencies
// ----------------------------------------------------------------------
public static String constructPluginKey( String groupId, String artifactId, String version )
{
return groupId + ":" + artifactId + ":" + version;
}
public String getPluginLookupKey()
{
return groupId + ":" + artifactId;
}
public String getId()
{
return constructPluginKey( groupId, artifactId, version );
}
public static String getDefaultPluginArtifactId( String id )
{
return "maven-" + id + "-plugin";
}
public static String getDefaultPluginGroupId()
{
return "org.apache.maven.plugins";
}
/**
* Parse maven-...-plugin.
*
* @todo move to plugin-tools-api as a default only
*/
public static String getGoalPrefixFromArtifactId( String artifactId )
{
if ( "maven-plugin-plugin".equals( artifactId ) )
{
return "plugin";
}
else
{
return artifactId.replaceAll( "-?maven-?", "" ).replaceAll( "-?plugin-?", "" );
}
}
public String getGoalPrefix()
{
return goalPrefix;
}
public void setGoalPrefix( String goalPrefix )
{
this.goalPrefix = goalPrefix;
}
public void setVersion( String version )
{
this.version = version;
}
public String getVersion()
{
return version;
}
public void setSource( String source )
{
this.source = source;
}
public String getSource()
{
return source;
}
public boolean isInheritedByDefault()
{
return inheritedByDefault;
}
public void setInheritedByDefault( boolean inheritedByDefault )
{
this.inheritedByDefault = inheritedByDefault;
}
public List getArtifacts()
{
return artifacts;
}
public void setArtifacts( List artifacts )
{
this.artifacts = artifacts;
// clear the calculated artifactMap
artifactMap = null;
}
public Map getArtifactMap()
{
if ( artifactMap == null )
{
artifactMap = ArtifactUtils.artifactMapByVersionlessId( getArtifacts() );
}
return artifactMap;
}
public boolean equals( Object object )
{
if ( this == object )
{
return true;
}
return getId().equals( ( (PluginDescriptor) object ).getId() );
}
public int hashCode()
{
return 10 + getId().hashCode();
}
public MojoDescriptor getMojo( String goal )
{
// TODO: could we use a map? Maybe if the parent did that for components too, as this is too vulnerable to
// changes above not being propogated to the map
MojoDescriptor mojoDescriptor = null;
for ( Iterator i = getMojos().iterator(); i.hasNext() && mojoDescriptor == null; )
{
MojoDescriptor desc = (MojoDescriptor) i.next();
if ( goal.equals( desc.getGoal() ) )
{
mojoDescriptor = desc;
}
}
return mojoDescriptor;
}
public Lifecycle getLifecycleMapping( String lifecycle )
throws IOException, XmlPullParserException
{
if ( lifecycleMappings == null )
{
LifecycleMappingsXpp3Reader reader = new LifecycleMappingsXpp3Reader();
InputStreamReader r = null;
LifecycleConfiguration config;
try
{
InputStream resourceAsStream = classRealm.getResourceAsStream( "/META-INF/maven/lifecycle.xml" );
if ( resourceAsStream == null )
{
throw new FileNotFoundException( "Unable to find /META-INF/maven/lifecycle.xml in the plugin" );
}
r = new InputStreamReader( resourceAsStream );
config = reader.read( r, true );
}
finally
{
IOUtil.close( r );
}
Map map = new HashMap();
for ( Iterator i = config.getLifecycles().iterator(); i.hasNext(); )
{
Lifecycle l = (Lifecycle) i.next();
map.put( l.getId(), l );
}
lifecycleMappings = map;
}
return (Lifecycle) lifecycleMappings.get( lifecycle );
}
public void setClassRealm( ClassRealm classRealm )
{
this.classRealm = classRealm;
}
public ClassRealm getClassRealm()
{
return classRealm;
}
public void setIntroducedDependencyArtifacts( Set introducedDependencyArtifacts )
{
this.introducedDependencyArtifacts = introducedDependencyArtifacts;
}
public Set getIntroducedDependencyArtifacts()
{
return introducedDependencyArtifacts != null ? introducedDependencyArtifacts : Collections.EMPTY_SET;
}
public void setName( String name )
{
this.name = name;
}
public String getName()
{
return name;
}
public void setDescription( String description )
{
this.description = description;
}
public String getDescription()
{
return description;
}
public Artifact getPluginArtifact()
{
return pluginArtifact;
}
public void setPluginArtifact( Artifact pluginArtifact )
{
this.pluginArtifact = pluginArtifact;
}
}

View File

@ -1,341 +0,0 @@
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 org.codehaus.plexus.component.repository.ComponentDependency;
import org.codehaus.plexus.component.repository.ComponentRequirement;
import org.codehaus.plexus.configuration.PlexusConfiguration;
import org.codehaus.plexus.configuration.PlexusConfigurationException;
import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
/**
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
* @version $Id$
*/
public class PluginDescriptorBuilder
{
public PluginDescriptor build( Reader reader )
throws PlexusConfigurationException
{
return build( reader, null );
}
public PluginDescriptor build( Reader reader, String source )
throws PlexusConfigurationException
{
PlexusConfiguration c = buildConfiguration( reader );
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setSource( source );
pluginDescriptor.setGroupId( c.getChild( "groupId" ).getValue() );
pluginDescriptor.setArtifactId( c.getChild( "artifactId" ).getValue() );
pluginDescriptor.setVersion( c.getChild( "version" ).getValue() );
pluginDescriptor.setGoalPrefix( c.getChild( "goalPrefix" ).getValue() );
pluginDescriptor.setName( c.getChild( "name" ).getValue() );
pluginDescriptor.setDescription( c.getChild( "description" ).getValue() );
String isolatedRealm = c.getChild( "isolatedRealm" ).getValue();
if ( isolatedRealm != null )
{
pluginDescriptor.setIsolatedRealm( Boolean.valueOf( isolatedRealm ).booleanValue() );
}
String inheritedByDefault = c.getChild( "inheritedByDefault" ).getValue();
if ( inheritedByDefault != null )
{
pluginDescriptor.setInheritedByDefault( Boolean.valueOf( inheritedByDefault ).booleanValue() );
}
// ----------------------------------------------------------------------
// Components
// ----------------------------------------------------------------------
PlexusConfiguration[] mojoConfigurations = c.getChild( "mojos" ).getChildren( "mojo" );
for ( int i = 0; i < mojoConfigurations.length; i++ )
{
PlexusConfiguration component = mojoConfigurations[i];
MojoDescriptor mojoDescriptor = buildComponentDescriptor( component, pluginDescriptor );
pluginDescriptor.addMojo( mojoDescriptor );
}
// ----------------------------------------------------------------------
// Dependencies
// ----------------------------------------------------------------------
PlexusConfiguration[] dependencyConfigurations = c.getChild( "dependencies" ).getChildren( "dependency" );
List dependencies = new ArrayList();
for ( int i = 0; i < dependencyConfigurations.length; i++ )
{
PlexusConfiguration d = dependencyConfigurations[i];
ComponentDependency cd = new ComponentDependency();
cd.setArtifactId( d.getChild( "artifactId" ).getValue() );
cd.setGroupId( d.getChild( "groupId" ).getValue() );
cd.setType( d.getChild( "type" ).getValue() );
cd.setVersion( d.getChild( "version" ).getValue() );
dependencies.add( cd );
}
pluginDescriptor.setDependencies( dependencies );
return pluginDescriptor;
}
public MojoDescriptor buildComponentDescriptor( PlexusConfiguration c, PluginDescriptor pluginDescriptor )
throws PlexusConfigurationException
{
MojoDescriptor mojo = new MojoDescriptor();
mojo.setPluginDescriptor( pluginDescriptor );
mojo.setGoal( c.getChild( "goal" ).getValue() );
mojo.setImplementation( c.getChild( "implementation" ).getValue() );
PlexusConfiguration langConfig = c.getChild( "language" );
if ( langConfig != null )
{
mojo.setLanguage( langConfig.getValue() );
}
PlexusConfiguration configuratorConfig = c.getChild( "configurator" );
if ( configuratorConfig != null )
{
mojo.setComponentConfigurator( configuratorConfig.getValue() );
}
PlexusConfiguration composerConfig = c.getChild( "composer" );
if ( composerConfig != null )
{
mojo.setComponentComposer( composerConfig.getValue() );
}
String since = c.getChild( "since" ).getValue();
if ( since != null )
{
mojo.setSince( since );
}
String phase = c.getChild( "phase" ).getValue();
if ( phase != null )
{
mojo.setPhase( phase );
}
String executePhase = c.getChild( "executePhase" ).getValue();
if ( executePhase != null )
{
mojo.setExecutePhase( executePhase );
}
String executeMojo = c.getChild( "executeGoal" ).getValue();
if ( executeMojo != null )
{
mojo.setExecuteGoal( executeMojo );
}
String executeLifecycle = c.getChild( "executeLifecycle" ).getValue();
if ( executeLifecycle != null )
{
mojo.setExecuteLifecycle( executeLifecycle );
}
mojo.setInstantiationStrategy( c.getChild( "instantiationStrategy" ).getValue() );
mojo.setDescription( c.getChild( "description" ).getValue() );
String dependencyResolution = c.getChild( "requiresDependencyResolution" ).getValue();
if ( dependencyResolution != null )
{
mojo.setDependencyResolutionRequired( dependencyResolution );
}
String directInvocationOnly = c.getChild( "requiresDirectInvocation" ).getValue();
if ( directInvocationOnly != null )
{
mojo.setDirectInvocationOnly( Boolean.valueOf( directInvocationOnly ).booleanValue() );
}
String requiresProject = c.getChild( "requiresProject" ).getValue();
if ( requiresProject != null )
{
mojo.setProjectRequired( Boolean.valueOf( requiresProject ).booleanValue() );
}
String requiresReports = c.getChild( "requiresReports" ).getValue();
if ( requiresReports != null )
{
mojo.setRequiresReports( Boolean.valueOf( requiresReports ).booleanValue() );
}
String aggregator = c.getChild( "aggregator" ).getValue();
if ( aggregator != null )
{
mojo.setAggregator( Boolean.valueOf( aggregator ).booleanValue() );
}
String requiresOnline = c.getChild( "requiresOnline" ).getValue();
if ( requiresOnline != null )
{
mojo.setOnlineRequired( Boolean.valueOf( requiresOnline ).booleanValue() );
}
String inheritedByDefault = c.getChild( "inheritedByDefault" ).getValue();
if ( inheritedByDefault != null )
{
mojo.setInheritedByDefault( Boolean.valueOf( inheritedByDefault ).booleanValue() );
}
// ----------------------------------------------------------------------
// Parameters
// ----------------------------------------------------------------------
PlexusConfiguration[] parameterConfigurations = c.getChild( "parameters" ).getChildren( "parameter" );
List parameters = new ArrayList();
for ( int i = 0; i < parameterConfigurations.length; i++ )
{
PlexusConfiguration d = parameterConfigurations[i];
Parameter parameter = new Parameter();
parameter.setName( d.getChild( "name" ).getValue() );
parameter.setAlias( d.getChild( "alias" ).getValue() );
parameter.setType( d.getChild( "type" ).getValue() );
String required = d.getChild( "required" ).getValue();
parameter.setRequired( Boolean.valueOf( required ).booleanValue() );
PlexusConfiguration editableConfig = d.getChild( "editable" );
// we need the null check for pre-build legacy plugins...
if ( editableConfig != null )
{
String editable = d.getChild( "editable" ).getValue();
parameter.setEditable( editable == null || Boolean.valueOf( editable ).booleanValue() );
}
parameter.setDescription( d.getChild( "description" ).getValue() );
parameter.setDeprecated( d.getChild( "deprecated" ).getValue() );
parameter.setImplementation( d.getChild( "implementation" ).getValue() );
parameters.add( parameter );
}
mojo.setParameters( parameters );
// TODO: this should not need to be handed off...
// ----------------------------------------------------------------------
// Configuration
// ----------------------------------------------------------------------
mojo.setMojoConfiguration( c.getChild( "configuration" ) );
// TODO: Go back to this when we get the container ready to configure mojos...
// mojo.setConfiguration( c.getChild( "configuration" ) );
// ----------------------------------------------------------------------
// Requirements
// ----------------------------------------------------------------------
PlexusConfiguration[] requirements = c.getChild( "requirements" ).getChildren( "requirement" );
for ( int i = 0; i < requirements.length; i++ )
{
PlexusConfiguration requirement = requirements[i];
ComponentRequirement cr = new ComponentRequirement();
cr.setRole( requirement.getChild( "role" ).getValue() );
cr.setRoleHint( requirement.getChild( "role-hint" ).getValue() );
cr.setFieldName( requirement.getChild( "field-name" ).getValue() );
mojo.addRequirement( cr );
}
return mojo;
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
public PlexusConfiguration buildConfiguration( Reader configuration )
throws PlexusConfigurationException
{
try
{
return new XmlPlexusConfiguration( Xpp3DomBuilder.build( configuration ) );
}
catch ( IOException e )
{
throw new PlexusConfigurationException( "Error creating configuration", e );
}
catch ( XmlPullParserException e )
{
throw new PlexusConfigurationException( "Error creating configuration", e );
}
}
}

View File

@ -1,55 +0,0 @@
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.
*/
/**
* Describes a component requirement.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @version $Id$
*/
public class Requirement
{
private final String role;
private final String roleHint;
public Requirement( String role )
{
this.role = role;
this.roleHint = null;
}
public Requirement( String role, String roleHint )
{
this.role = role;
this.roleHint = roleHint;
}
public String getRole()
{
return role;
}
public String getRoleHint()
{
return roleHint;
}
}

View File

@ -1,125 +0,0 @@
<!--
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.
-->
<model>
<id>lifecycle-mappings</id>
<name>LifecycleMappings</name>
<description><![CDATA[
Configuration of custom lifecycle mappings for the plugin.
]]></description>
<defaults>
<default>
<key>package</key>
<value>org.apache.maven.plugin.lifecycle</value>
</default>
</defaults>
<classes>
<class rootElement="true" xml.tagName="lifecycles">
<name>LifecycleConfiguration</name>
<version>1.0.0</version>
<description>Root element of the lifecycle.xml file.</description>
<fields>
<field xml.listStyle="flat">
<name>lifecycles</name>
<version>1.0.0</version>
<association>
<type>Lifecycle</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
</class>
<class>
<name>Lifecycle</name>
<version>1.0.0</version>
<description><![CDATA[
A custom lifecycle mapping definition.
]]></description>
<fields>
<field>
<name>id</name>
<required>true</required>
<version>1.0.0</version>
<type>String</type>
<description>The ID of this lifecycle, for identification in the mojo descriptor.</description>
</field>
<field>
<name>phases</name>
<version>1.0.0</version>
<description>The phase mappings for this lifecycle.</description>
<association>
<type>Phase</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
</class>
<class>
<name>Phase</name>
<version>1.0.0</version>
<description>A phase mapping definition.</description>
<fields>
<field>
<name>id</name>
<required>true</required>
<version>1.0.0</version>
<type>String</type>
<description>The ID of this phase, eg &lt;code&gt;generate-sources&lt;/code&gt;.</description>
</field>
<field>
<name>executions</name>
<version>1.0.0</version>
<description>The goals to execute within the phase.</description>
<association>
<type>Execution</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>configuration</name>
<version>1.0.0</version>
<type>DOM</type>
<description>Configuration to pass to all goals run in this phase.</description>
</field>
</fields>
</class>
<class>
<name>Execution</name>
<version>1.0.0</version>
<description>A set of goals to execute.</description>
<fields>
<field>
<name>configuration</name>
<version>1.0.0</version>
<type>DOM</type>
<description>Configuration to pass to the goals.</description>
</field>
<field>
<name>goals</name>
<version>1.0.0</version>
<description>The goals to execute.</description>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
</class>
</classes>
</model>

View File

@ -1,57 +0,0 @@
package org.apache.maven.plugin.lifecycle;
/*
* 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 junit.framework.TestCase;
import org.apache.maven.plugin.lifecycle.io.xpp3.LifecycleMappingsXpp3Reader;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Test the lifecycle reader.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @version $Id$
*/
public class LifecycleXpp3ReaderTest
extends TestCase
{
public void testLifecycleReader()
throws IOException, XmlPullParserException
{
LifecycleMappingsXpp3Reader reader = new LifecycleMappingsXpp3Reader();
LifecycleConfiguration config = reader.read( new InputStreamReader( getClass().getResourceAsStream( "/lifecycle.xml" ) ) );
assertEquals( "check number of lifecycles", 1, config.getLifecycles().size() );
Lifecycle l = (Lifecycle) config.getLifecycles().iterator().next();
assertEquals( "check id", "clover", l.getId() );
assertEquals( "check number of phases", 1, l.getPhases().size() );
Phase p = (Phase) l.getPhases().iterator().next();
assertEquals( "check id", "generate-sources", p.getId() );
assertEquals( "check number of executions", 1, p.getExecutions().size() );
Execution e = (Execution) p.getExecutions().iterator().next();
assertEquals( "check configuration", "true", ((Xpp3Dom) e.getConfiguration()).getChild( "debug" ).getValue() );
assertEquals( "check number of goals", 1, e.getGoals().size() );
String g = (String) e.getGoals().iterator().next();
assertEquals( "check goal", "clover:compiler", g );
}
}

View File

@ -1,39 +0,0 @@
<!--
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.
-->
<lifecycles>
<lifecycle>
<id>clover</id>
<phases>
<phase>
<id>generate-sources</id>
<executions>
<execution>
<configuration>
<debug>true</debug>
</configuration>
<goals>
<goal>clover:compiler</goal>
</goals>
</execution>
</executions>
</phase>
</phases>
</lifecycle>
</lifecycles>