mirror of https://github.com/apache/maven.git
clean up plugin configuration handling
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163652 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
336fa855be
commit
e0e405fe68
|
@ -40,13 +40,14 @@ import org.apache.maven.settings.MavenSettingsBuilder;
|
||||||
import org.codehaus.plexus.ArtifactEnabledContainer;
|
import org.codehaus.plexus.ArtifactEnabledContainer;
|
||||||
import org.codehaus.plexus.PlexusConstants;
|
import org.codehaus.plexus.PlexusConstants;
|
||||||
import org.codehaus.plexus.PlexusContainer;
|
import org.codehaus.plexus.PlexusContainer;
|
||||||
import org.codehaus.plexus.component.configurator.BasicComponentConfigurator;
|
|
||||||
import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
|
import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
|
||||||
import org.codehaus.plexus.component.configurator.ComponentConfigurator;
|
import org.codehaus.plexus.component.configurator.ComponentConfigurator;
|
||||||
import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent;
|
import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent;
|
||||||
import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener;
|
import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener;
|
||||||
import org.codehaus.plexus.component.repository.ComponentSetDescriptor;
|
import org.codehaus.plexus.component.repository.ComponentSetDescriptor;
|
||||||
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
|
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
|
||||||
|
import org.codehaus.plexus.configuration.PlexusConfiguration;
|
||||||
|
import org.codehaus.plexus.configuration.PlexusConfigurationException;
|
||||||
import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
|
import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
|
||||||
import org.codehaus.plexus.context.Context;
|
import org.codehaus.plexus.context.Context;
|
||||||
import org.codehaus.plexus.context.ContextException;
|
import org.codehaus.plexus.context.ContextException;
|
||||||
|
@ -59,7 +60,6 @@ import org.codehaus.plexus.util.dag.CycleDetectedException;
|
||||||
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
@ -89,6 +89,8 @@ public class DefaultPluginManager
|
||||||
|
|
||||||
protected MavenSettingsBuilder mavenSettingsBuilder;
|
protected MavenSettingsBuilder mavenSettingsBuilder;
|
||||||
|
|
||||||
|
protected ComponentConfigurator configurator;
|
||||||
|
|
||||||
public DefaultPluginManager()
|
public DefaultPluginManager()
|
||||||
{
|
{
|
||||||
mojoDescriptors = new HashMap();
|
mojoDescriptors = new HashMap();
|
||||||
|
@ -136,7 +138,8 @@ public class DefaultPluginManager
|
||||||
|
|
||||||
private Set pluginsInProcess = new HashSet();
|
private Set pluginsInProcess = new HashSet();
|
||||||
|
|
||||||
public void processPluginDescriptor( MavenPluginDescriptor mavenPluginDescriptor ) throws CycleDetectedException
|
public void processPluginDescriptor( MavenPluginDescriptor mavenPluginDescriptor )
|
||||||
|
throws CycleDetectedException
|
||||||
{
|
{
|
||||||
if ( pluginsInProcess.contains( mavenPluginDescriptor.getPluginId() ) )
|
if ( pluginsInProcess.contains( mavenPluginDescriptor.getPluginId() ) )
|
||||||
{
|
{
|
||||||
|
@ -207,7 +210,8 @@ public class DefaultPluginManager
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: don't throw Exception
|
// TODO: don't throw Exception
|
||||||
public void verifyPluginForGoal( String goalName, MavenSession session ) throws Exception
|
public void verifyPluginForGoal( String goalName, MavenSession session )
|
||||||
|
throws Exception
|
||||||
{
|
{
|
||||||
String pluginId = getPluginId( goalName );
|
String pluginId = getPluginId( goalName );
|
||||||
|
|
||||||
|
@ -216,7 +220,8 @@ public class DefaultPluginManager
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: don't throw Exception
|
// TODO: don't throw Exception
|
||||||
public void verifyPlugin( String groupId, String artifactId, MavenSession session ) throws Exception
|
public void verifyPlugin( String groupId, String artifactId, MavenSession session )
|
||||||
|
throws Exception
|
||||||
{
|
{
|
||||||
if ( !isPluginInstalled( groupId, artifactId ) )
|
if ( !isPluginInstalled( groupId, artifactId ) )
|
||||||
{
|
{
|
||||||
|
@ -263,7 +268,7 @@ public class DefaultPluginManager
|
||||||
|
|
||||||
// TODO: more hard coding here...
|
// TODO: more hard coding here...
|
||||||
Artifact pluginArtifact = artifactFactory.createArtifact( "maven", artifactId, version, null,
|
Artifact pluginArtifact = artifactFactory.createArtifact( "maven", artifactId, version, null,
|
||||||
"maven-plugin", "jar", null );
|
"maven-plugin", null );
|
||||||
|
|
||||||
addPlugin( pluginArtifact, session );
|
addPlugin( pluginArtifact, session );
|
||||||
}
|
}
|
||||||
|
@ -278,7 +283,8 @@ public class DefaultPluginManager
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: don't throw Exception
|
// TODO: don't throw Exception
|
||||||
protected void addPlugin( Artifact pluginArtifact, MavenSession session ) throws Exception
|
protected void addPlugin( Artifact pluginArtifact, MavenSession session )
|
||||||
|
throws Exception
|
||||||
{
|
{
|
||||||
ArtifactResolver artifactResolver = null;
|
ArtifactResolver artifactResolver = null;
|
||||||
MavenProjectBuilder mavenProjectBuilder = null;
|
MavenProjectBuilder mavenProjectBuilder = null;
|
||||||
|
@ -314,7 +320,8 @@ public class DefaultPluginManager
|
||||||
// Plugin execution
|
// Plugin execution
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public void executeMojo( MavenSession session, String goalName ) throws PluginExecutionException
|
public void executeMojo( MavenSession session, String goalName )
|
||||||
|
throws PluginExecutionException
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -388,13 +395,19 @@ public class DefaultPluginManager
|
||||||
// intentionally ignored
|
// intentionally ignored
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: can probable refactor these a little when only the new plugin technique is in place
|
||||||
|
PlexusConfiguration configuration = getProjectDefinedPluginConfiguration( session.getProject(),
|
||||||
|
mojoDescriptor.getId() );
|
||||||
|
|
||||||
|
Map map = getPluginConfigurationFromExpressions( mojoDescriptor, configuration, session );
|
||||||
|
|
||||||
if ( newMojoTechnique )
|
if ( newMojoTechnique )
|
||||||
{
|
{
|
||||||
populateParameters( plugin, mojoDescriptor, session );
|
populatePluginFields( plugin, configuration, map );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
request = new PluginExecutionRequest( createParameters( mojoDescriptor, session ) );
|
request = createPluginRequest( configuration, map );
|
||||||
}
|
}
|
||||||
|
|
||||||
// !! This is ripe for refactoring to an aspect.
|
// !! This is ripe for refactoring to an aspect.
|
||||||
|
@ -449,7 +462,8 @@ public class DefaultPluginManager
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: don't throw Exception
|
// TODO: don't throw Exception
|
||||||
private void releaseComponents( MojoDescriptor goal, PluginExecutionRequest request ) throws Exception
|
private void releaseComponents( MojoDescriptor goal, PluginExecutionRequest request )
|
||||||
|
throws Exception
|
||||||
{
|
{
|
||||||
if ( request != null && request.getParameters() != null )
|
if ( request != null && request.getParameters() != null )
|
||||||
{
|
{
|
||||||
|
@ -475,76 +489,77 @@ public class DefaultPluginManager
|
||||||
// Mojo Parameter Handling
|
// Mojo Parameter Handling
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
private void populateParameters( Plugin plugin, MojoDescriptor mojoDescriptor, MavenSession session )
|
private static PluginExecutionRequest createPluginRequest( PlexusConfiguration configuration, Map map )
|
||||||
throws PluginConfigurationException
|
throws PluginConfigurationException
|
||||||
{
|
{
|
||||||
// TODO: merge eventually, just to avoid reuse
|
|
||||||
// TODO: probably want to use the plexus component configurator... then do the additional processing in
|
|
||||||
// createParameters afterwards. Not sure how we might find files that are nested in other objects... perhaps
|
|
||||||
// we add a "needs translation" to the mojo so such types can be translated (implementing some interface) and
|
|
||||||
// address their own file objects
|
|
||||||
Map values = createParameters( mojoDescriptor, session );
|
|
||||||
|
|
||||||
List parameters = mojoDescriptor.getParameters();
|
|
||||||
|
|
||||||
Xpp3Dom dom = new Xpp3Dom( mojoDescriptor.getId() );
|
|
||||||
|
|
||||||
for ( Iterator i = parameters.iterator(); i.hasNext(); )
|
|
||||||
{
|
|
||||||
Parameter param = (Parameter) i.next();
|
|
||||||
String name = param.getName();
|
|
||||||
Object value = values.get( name );
|
|
||||||
|
|
||||||
// TODO:Still not complete robust - need to merge in the processing in createParameters
|
|
||||||
if ( value instanceof String )
|
|
||||||
{
|
|
||||||
Xpp3Dom d = new Xpp3Dom( name );
|
|
||||||
d.setValue( (String) value );
|
|
||||||
dom.addChild( d );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Class clazz = plugin.getClass();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Field f = clazz.getDeclaredField( name );
|
|
||||||
boolean accessible = f.isAccessible();
|
|
||||||
if ( !accessible )
|
|
||||||
{
|
|
||||||
f.setAccessible( true );
|
|
||||||
}
|
|
||||||
|
|
||||||
f.set( plugin, value );
|
|
||||||
|
|
||||||
if ( !accessible )
|
|
||||||
{
|
|
||||||
f.setAccessible( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch ( NoSuchFieldException e )
|
|
||||||
{
|
|
||||||
throw new PluginConfigurationException( "Unable to set field '" + name + "' on '" + clazz + "'" );
|
|
||||||
}
|
|
||||||
catch ( IllegalAccessException e )
|
|
||||||
{
|
|
||||||
throw new PluginConfigurationException( "Unable to set field '" + name + "' on '" + clazz + "'" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: should be a component
|
|
||||||
ComponentConfigurator configurator = new BasicComponentConfigurator();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
configurator.configureComponent( plugin, new XmlPlexusConfiguration( dom ) );
|
Map parameters = new HashMap();
|
||||||
|
PlexusConfiguration[] children = configuration.getChildren();
|
||||||
|
for ( int i = 0; i < children.length; i++ )
|
||||||
|
{
|
||||||
|
PlexusConfiguration child = children[i];
|
||||||
|
parameters.put( child.getName(), child.getValue() );
|
||||||
|
}
|
||||||
|
map = CollectionUtils.mergeMaps( map, parameters );
|
||||||
|
}
|
||||||
|
catch ( PlexusConfigurationException e )
|
||||||
|
{
|
||||||
|
throw new PluginConfigurationException( "Unable to construct map from plugin configuration", e );
|
||||||
|
}
|
||||||
|
return new PluginExecutionRequest( map );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void populatePluginFields( Plugin plugin, PlexusConfiguration configuration, Map map )
|
||||||
|
throws PluginConfigurationException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
configurator.configureComponent( plugin, configuration );
|
||||||
}
|
}
|
||||||
catch ( ComponentConfigurationException e )
|
catch ( ComponentConfigurationException e )
|
||||||
{
|
{
|
||||||
throw new PluginConfigurationException( "Unable to parse the created DOM for plugin configuration", e );
|
throw new PluginConfigurationException( "Unable to parse the created DOM for plugin configuration", e );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Configuration does not store objects, so the non-String fields are configured here
|
||||||
|
// TODO: we don't have converters, so something things that -are- strings are not configured properly (eg String -> File from an expression)
|
||||||
|
for ( Iterator i = map.keySet().iterator(); i.hasNext(); )
|
||||||
|
{
|
||||||
|
String key = (String) i.next();
|
||||||
|
Object value = map.get( key );
|
||||||
|
|
||||||
|
Class clazz = plugin.getClass();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Field f = clazz.getDeclaredField( key );
|
||||||
|
boolean accessible = f.isAccessible();
|
||||||
|
if ( !accessible )
|
||||||
|
{
|
||||||
|
f.setAccessible( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
f.set( plugin, value );
|
||||||
|
|
||||||
|
if ( !accessible )
|
||||||
|
{
|
||||||
|
f.setAccessible( false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch ( NoSuchFieldException e1 )
|
||||||
|
{
|
||||||
|
throw new PluginConfigurationException( "Unable to set field '" + key + "' on '" + clazz + "'" );
|
||||||
|
}
|
||||||
|
catch ( IllegalAccessException e11 )
|
||||||
|
{
|
||||||
|
throw new PluginConfigurationException( "Unable to set field '" + key + "' on '" + clazz + "'" );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map createParameters( MojoDescriptor goal, MavenSession session ) throws PluginConfigurationException
|
private Map getPluginConfigurationFromExpressions( MojoDescriptor goal, PlexusConfiguration configuration,
|
||||||
|
MavenSession session )
|
||||||
|
throws PluginConfigurationException
|
||||||
{
|
{
|
||||||
List parameters = goal.getParameters();
|
List parameters = goal.getParameters();
|
||||||
|
|
||||||
|
@ -556,65 +571,57 @@ public class DefaultPluginManager
|
||||||
|
|
||||||
String key = parameter.getName();
|
String key = parameter.getName();
|
||||||
|
|
||||||
String expression = parameter.getExpression();
|
if ( configuration.getChild( key, false ) == null )
|
||||||
|
|
||||||
Object value = PluginParameterExpressionEvaluator.evaluate( expression, session );
|
|
||||||
|
|
||||||
getLogger().debug( "Evaluated mojo parameter expression: \'" + expression + "\' to: " + value );
|
|
||||||
|
|
||||||
if ( value == null )
|
|
||||||
{
|
{
|
||||||
if ( parameter.getDefaultValue() != null )
|
String expression = parameter.getExpression();
|
||||||
|
|
||||||
|
Object value = PluginParameterExpressionEvaluator.evaluate( expression, session );
|
||||||
|
|
||||||
|
getLogger().debug( "Evaluated mojo parameter expression: \'" + expression + "\' to: " + value );
|
||||||
|
|
||||||
|
if ( value == null )
|
||||||
{
|
{
|
||||||
value = PluginParameterExpressionEvaluator.evaluate( parameter.getDefaultValue(), session );
|
if ( parameter.getDefaultValue() != null )
|
||||||
|
{
|
||||||
|
value = PluginParameterExpressionEvaluator.evaluate( parameter.getDefaultValue(), session );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
map.put( key, value );
|
// ----------------------------------------------------------------------
|
||||||
}
|
// We will perform a basic check here for parameters values that are
|
||||||
|
// required. Required parameters can't be null so we throw an
|
||||||
|
// Exception in the case where they are. We probably want some
|
||||||
|
// pluggable
|
||||||
|
// mechanism here but this will catch the most obvious of
|
||||||
|
// misconfigurations.
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
if ( session.getProject() != null )
|
if ( value == null && parameter.isRequired() )
|
||||||
{
|
{
|
||||||
map = mergeProjectDefinedPluginConfiguration( session.getProject(), goal.getId(), map );
|
throw new PluginConfigurationException( createPluginParameterRequiredMessage( goal, parameter ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( int i = 0; i < parameters.size(); i++ )
|
String type = parameter.getType();
|
||||||
{
|
|
||||||
Parameter parameter = (Parameter) parameters.get( i );
|
|
||||||
|
|
||||||
String key = parameter.getName();
|
// TODO: Not sure how we might find files that are nested in other objects... perhaps
|
||||||
|
// we add a "needs translation" to the mojo so such types can be translated (implementing some interface) and
|
||||||
|
// address their own file objects
|
||||||
|
if ( type != null && ( type.equals( "File" ) || type.equals( "java.io.File" ) ) )
|
||||||
|
{
|
||||||
|
value = pathTranslator.alignToBaseDirectory( (String) value,
|
||||||
|
session.getProject().getFile().getParentFile() );
|
||||||
|
}
|
||||||
|
|
||||||
Object value = map.get( key );
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
// We will perform a basic check here for parameters values that are
|
|
||||||
// required. Required parameters can't be null so we throw an
|
|
||||||
// Exception in the case where they are. We probably want some
|
|
||||||
// pluggable
|
|
||||||
// mechanism here but this will catch the most obvious of
|
|
||||||
// misconfigurations.
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
if ( value == null && parameter.isRequired() )
|
|
||||||
{
|
|
||||||
throw new PluginConfigurationException( createPluginParameterRequiredMessage( goal, parameter ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
String type = parameter.getType();
|
|
||||||
|
|
||||||
if ( type != null && ( type.equals( "File" ) || type.equals( "java.io.File" ) ) )
|
|
||||||
{
|
|
||||||
value = pathTranslator.alignToBaseDirectory( (String) value, session.getProject().getFile()
|
|
||||||
.getParentFile() );
|
|
||||||
map.put( key, value );
|
map.put( key, value );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map mergeProjectDefinedPluginConfiguration( MavenProject project, String goalId, Map map )
|
private static PlexusConfiguration getProjectDefinedPluginConfiguration( MavenProject project, String goalId )
|
||||||
{
|
{
|
||||||
|
Xpp3Dom dom = null;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// I would like to be able to lookup the Plugin object using a key but
|
// I would like to be able to lookup the Plugin object using a key but
|
||||||
// we have a limitation in modello that will be remedied shortly. So
|
// we have a limitation in modello that will be remedied shortly. So
|
||||||
|
@ -625,14 +632,14 @@ public class DefaultPluginManager
|
||||||
{
|
{
|
||||||
String pluginId = getPluginId( goalId );
|
String pluginId = getPluginId( goalId );
|
||||||
|
|
||||||
for ( Iterator iterator = project.getPlugins().iterator(); iterator.hasNext(); )
|
for ( Iterator iterator = project.getPlugins().iterator(); iterator.hasNext() && dom == null; )
|
||||||
{
|
{
|
||||||
org.apache.maven.model.Plugin plugin = (org.apache.maven.model.Plugin) iterator.next();
|
org.apache.maven.model.Plugin plugin = (org.apache.maven.model.Plugin) iterator.next();
|
||||||
|
|
||||||
// TODO: groupID not handled
|
// TODO: groupID not handled
|
||||||
if ( pluginId.equals( plugin.getArtifactId() ) )
|
if ( pluginId.equals( plugin.getArtifactId() ) )
|
||||||
{
|
{
|
||||||
map = CollectionUtils.mergeMaps( plugin.getConfiguration(), map );
|
dom = (Xpp3Dom) plugin.getConfiguration();
|
||||||
|
|
||||||
// TODO: much less of this magic is needed - make the mojoDescriptor just store the first and second part
|
// TODO: much less of this magic is needed - make the mojoDescriptor just store the first and second part
|
||||||
int index = goalId.indexOf( ':' );
|
int index = goalId.indexOf( ':' );
|
||||||
|
@ -644,26 +651,78 @@ public class DefaultPluginManager
|
||||||
Goal goal = (Goal) j.next();
|
Goal goal = (Goal) j.next();
|
||||||
if ( goal.getId().equals( goalName ) )
|
if ( goal.getId().equals( goalName ) )
|
||||||
{
|
{
|
||||||
map = CollectionUtils.mergeMaps( goal.getConfiguration(), map );
|
Xpp3Dom goalConfiguration = copyXpp3Dom( (Xpp3Dom) goal.getConfiguration() );
|
||||||
|
mergeXpp3Dom( goalConfiguration, dom );
|
||||||
|
dom = goalConfiguration;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return map;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return map;
|
PlexusConfiguration configuration;
|
||||||
|
if ( dom == null )
|
||||||
|
{
|
||||||
|
configuration = new XmlPlexusConfiguration( "configuration" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
configuration = new XmlPlexusConfiguration( dom );
|
||||||
|
}
|
||||||
|
|
||||||
|
return configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void mergeXpp3Dom( Xpp3Dom dominant, Xpp3Dom recessive )
|
||||||
|
{
|
||||||
|
// TODO: how to merge lists rather than override?
|
||||||
|
// TODO: share this as some sort of assembler, implement a walk interface?
|
||||||
|
Xpp3Dom[] children = recessive.getChildren();
|
||||||
|
for ( int i = 0; i < children.length; i++ )
|
||||||
|
{
|
||||||
|
Xpp3Dom child = children[i];
|
||||||
|
Xpp3Dom childDom = dominant.getChild( child.getName() );
|
||||||
|
if ( childDom != null )
|
||||||
|
{
|
||||||
|
mergeXpp3Dom( childDom, child );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dominant.addChild( copyXpp3Dom( child ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Xpp3Dom copyXpp3Dom( Xpp3Dom src )
|
||||||
|
{
|
||||||
|
// TODO: into Xpp3Dom as a copy constructor
|
||||||
|
Xpp3Dom dom = new Xpp3Dom( src.getName() );
|
||||||
|
dom.setValue( src.getValue() );
|
||||||
|
|
||||||
|
String[] attributeNames = src.getAttributeNames();
|
||||||
|
for ( int i = 0; i < attributeNames.length; i++ )
|
||||||
|
{
|
||||||
|
String attributeName = attributeNames[i];
|
||||||
|
dom.setAttribute( attributeName, src.getAttribute( attributeName ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
Xpp3Dom[] children = src.getChildren();
|
||||||
|
for ( int i = 0; i < children.length; i++ )
|
||||||
|
{
|
||||||
|
dom.addChild( copyXpp3Dom( children[i] ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return dom;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String createPluginParameterRequiredMessage( MojoDescriptor mojo, Parameter parameter )
|
public static String createPluginParameterRequiredMessage( MojoDescriptor mojo, Parameter parameter )
|
||||||
{
|
{
|
||||||
StringBuffer message = new StringBuffer();
|
StringBuffer message = new StringBuffer();
|
||||||
|
|
||||||
message.append( "The '" + parameter.getName() ).append( "' parameter is required for the execution of the " )
|
message.append( "The '" + parameter.getName() ).append( "' parameter is required for the execution of the " ).append(
|
||||||
.append( mojo.getId() ).append( " mojo and cannot be null." );
|
mojo.getId() ).append( " mojo and cannot be null." );
|
||||||
|
|
||||||
return message.toString();
|
return message.toString();
|
||||||
}
|
}
|
||||||
|
@ -672,7 +731,8 @@ public class DefaultPluginManager
|
||||||
// Lifecycle
|
// Lifecycle
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public void contextualize( Context context ) throws ContextException
|
public void contextualize( Context context )
|
||||||
|
throws ContextException
|
||||||
{
|
{
|
||||||
container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
|
container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
|
||||||
}
|
}
|
||||||
|
@ -680,18 +740,11 @@ public class DefaultPluginManager
|
||||||
public void initialize()
|
public void initialize()
|
||||||
{
|
{
|
||||||
// TODO: configure this from bootstrap or scan lib
|
// TODO: configure this from bootstrap or scan lib
|
||||||
artifactFilter = new ExclusionSetFilter( new String[] {
|
artifactFilter = new ExclusionSetFilter( new String[]{"maven-core", "maven-artifact", "maven-model",
|
||||||
"maven-core",
|
"maven-settings", "maven-monitor", "maven-plugin",
|
||||||
"maven-artifact",
|
"plexus-container-api", "plexus-container-default",
|
||||||
"maven-model",
|
"plexus-artifact-container", "wagon-provider-api",
|
||||||
"maven-settings",
|
"classworlds"} );
|
||||||
"maven-monitor",
|
|
||||||
"maven-plugin",
|
|
||||||
"plexus-container-api",
|
|
||||||
"plexus-container-default",
|
|
||||||
"plexus-artifact-container",
|
|
||||||
"wagon-provider-api",
|
|
||||||
"classworlds" } );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -700,7 +753,7 @@ public class DefaultPluginManager
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
private void resolveTransitiveDependencies( MavenSession context, ArtifactResolver artifactResolver,
|
private void resolveTransitiveDependencies( MavenSession context, ArtifactResolver artifactResolver,
|
||||||
MavenProjectBuilder mavenProjectBuilder )
|
MavenProjectBuilder mavenProjectBuilder )
|
||||||
throws ArtifactResolutionException
|
throws ArtifactResolutionException
|
||||||
{
|
{
|
||||||
MavenProject project = context.getProject();
|
MavenProject project = context.getProject();
|
||||||
|
|
|
@ -31,7 +31,6 @@ import org.codehaus.plexus.util.StringUtils;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -265,16 +264,10 @@ public class DefaultModelInheritanceAssembler
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Boolean disabled = childGoal.isDisabled();
|
// TODO: configuration not currently merged
|
||||||
if ( disabled == null )
|
if ( childGoal.getConfiguration() == null )
|
||||||
{
|
{
|
||||||
childGoal.setDisabled( parentGoal.isDisabled() );
|
childGoal.setConfiguration( parentGoal.getConfiguration() );
|
||||||
|
|
||||||
Properties conf = new Properties( childGoal.getConfiguration() );
|
|
||||||
|
|
||||||
conf.putAll( parentGoal.getConfiguration() );
|
|
||||||
|
|
||||||
childGoal.setConfiguration( conf );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@ import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -92,12 +91,6 @@ public class DefaultModelDefaultsInjector
|
||||||
plugin.setVersion( def.getVersion() );
|
plugin.setVersion( def.getVersion() );
|
||||||
}
|
}
|
||||||
|
|
||||||
Boolean disabled = plugin.isDisabled();
|
|
||||||
if ( disabled == null )
|
|
||||||
{
|
|
||||||
plugin.setDisabled( def.isDisabled() );
|
|
||||||
}
|
|
||||||
|
|
||||||
Map goalMap = new TreeMap();
|
Map goalMap = new TreeMap();
|
||||||
|
|
||||||
List pluginGoals = plugin.getGoals();
|
List pluginGoals = plugin.getGoals();
|
||||||
|
@ -125,22 +118,22 @@ public class DefaultModelDefaultsInjector
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Properties conf = defaultGoal.getConfiguration();
|
// TODO: merge
|
||||||
|
if ( localGoal.getConfiguration() == null )
|
||||||
conf.putAll( localGoal.getConfiguration() );
|
{
|
||||||
|
localGoal.setConfiguration( defaultGoal.getConfiguration() );
|
||||||
localGoal.setConfiguration( conf );
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.setGoals( new ArrayList( goalMap.values() ) );
|
plugin.setGoals( new ArrayList( goalMap.values() ) );
|
||||||
|
|
||||||
Properties props = new Properties( def.getConfiguration() );
|
// TODO: merge
|
||||||
|
if ( plugin.getConfiguration() == null )
|
||||||
props.putAll( plugin.getConfiguration() );
|
{
|
||||||
|
plugin.setConfiguration( def.getConfiguration() );
|
||||||
plugin.setConfiguration( props );
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void injectDependencyDefaults( List dependencies, DependencyManagement dependencyManagement )
|
private void injectDependencyDefaults( List dependencies, DependencyManagement dependencyManagement )
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
<requirement>
|
<requirement>
|
||||||
<role>org.apache.maven.settings.MavenSettingsBuilder</role>
|
<role>org.apache.maven.settings.MavenSettingsBuilder</role>
|
||||||
</requirement>
|
</requirement>
|
||||||
|
<requirement>
|
||||||
|
<role>org.codehaus.plexus.component.configurator.ComponentConfigurator</role>
|
||||||
|
</requirement>
|
||||||
</requirements>
|
</requirements>
|
||||||
</component>
|
</component>
|
||||||
<component>
|
<component>
|
||||||
|
|
|
@ -20,10 +20,10 @@ import org.apache.maven.MavenTestCase;
|
||||||
import org.apache.maven.model.Goal;
|
import org.apache.maven.model.Goal;
|
||||||
import org.apache.maven.model.Plugin;
|
import org.apache.maven.model.Plugin;
|
||||||
import org.apache.maven.project.MavenProject;
|
import org.apache.maven.project.MavenProject;
|
||||||
|
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
@ -61,13 +61,14 @@ public class CanonicalProjectBuilderTest
|
||||||
|
|
||||||
assertEquals( "1.0", plugin.getVersion() );
|
assertEquals( "1.0", plugin.getVersion() );
|
||||||
|
|
||||||
Properties properties = plugin.getConfiguration();
|
Xpp3Dom configuration = (Xpp3Dom) plugin.getConfiguration();
|
||||||
|
|
||||||
assertEquals( "src/conf/plexus.conf", properties.getProperty( "plexusConfiguration" ) );
|
assertEquals( "src/conf/plexus.conf", configuration.getChild( "plexusConfiguration" ).getValue() );
|
||||||
|
|
||||||
assertEquals( "src/conf/plexus.properties", properties.getProperty( "plexusConfigurationPropertiesFile" ) );
|
assertEquals( "src/conf/plexus.properties",
|
||||||
|
configuration.getChild( "plexusConfigurationPropertiesFile" ).getValue() );
|
||||||
|
|
||||||
assertEquals( "Continuum", properties.getProperty( "plexusApplicationName" ) );
|
assertEquals( "Continuum", configuration.getChild( "plexusApplicationName" ).getValue() );
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Goal specific configuration
|
// Goal specific configuration
|
||||||
|
@ -79,9 +80,9 @@ public class CanonicalProjectBuilderTest
|
||||||
|
|
||||||
assertEquals( "plexus:runtime", g0.getId() );
|
assertEquals( "plexus:runtime", g0.getId() );
|
||||||
|
|
||||||
Properties goalProperties = g0.getConfiguration();
|
configuration = (Xpp3Dom) g0.getConfiguration();
|
||||||
|
|
||||||
assertEquals( "ContinuumPro", goalProperties.getProperty( "plexusApplicationName" ) );
|
assertEquals( "ContinuumPro", configuration.getChild( "plexusApplicationName" ).getValue() );
|
||||||
|
|
||||||
// Plugin1 [antlr]
|
// Plugin1 [antlr]
|
||||||
}
|
}
|
||||||
|
|
|
@ -1975,19 +1975,9 @@
|
||||||
<description><![CDATA[The version of the plugin to be used.]]></description>
|
<description><![CDATA[The version of the plugin to be used.]]></description>
|
||||||
<type>String</type>
|
<type>String</type>
|
||||||
</field>
|
</field>
|
||||||
<field>
|
|
||||||
<name>disabled</name>
|
|
||||||
<version>4.0.0</version>
|
|
||||||
<type>String</type>
|
|
||||||
<!-- defaultValue>false</defaultValue -->
|
|
||||||
</field>
|
|
||||||
<field>
|
<field>
|
||||||
<name>configuration</name>
|
<name>configuration</name>
|
||||||
<type>Properties</type>
|
<type>DOM</type>
|
||||||
<association xml.mapStyle="inline">
|
|
||||||
<type>String</type>
|
|
||||||
<multiplicity>*</multiplicity>
|
|
||||||
</association>
|
|
||||||
</field>
|
</field>
|
||||||
<field>
|
<field>
|
||||||
<name>goals</name>
|
<name>goals</name>
|
||||||
|
@ -2008,19 +1998,9 @@
|
||||||
<version>4.0.0</version>
|
<version>4.0.0</version>
|
||||||
<type>String</type>
|
<type>String</type>
|
||||||
</field>
|
</field>
|
||||||
<field>
|
|
||||||
<name>disabled</name>
|
|
||||||
<version>4.0.0</version>
|
|
||||||
<type>String</type>
|
|
||||||
<!-- defaultValue>false</defaultValue -->
|
|
||||||
</field>
|
|
||||||
<field>
|
<field>
|
||||||
<name>configuration</name>
|
<name>configuration</name>
|
||||||
<type>Properties</type>
|
<type>DOM</type>
|
||||||
<association xml.mapStyle="inline">
|
|
||||||
<type>String</type>
|
|
||||||
<multiplicity>*</multiplicity>
|
|
||||||
</association>
|
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
</class>
|
</class>
|
||||||
|
|
Loading…
Reference in New Issue