diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
index ec118365f3..66d57d39ba 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
@@ -174,45 +174,23 @@ private void processGoals( MavenSession session, List tasks )
private void injectHandlerPluginConfiguration( MavenProject project, String groupId, String artifactId )
{
- // TODO: use the model injector, or just lookup the versions from the project?
- // They need to be injected, but we should track the required plugins first, then just sweep through.
-
- // TODO: this is a bit of a hack to get the version from plugin management - please fix
-
- Plugin plugin = findPlugin( project.getPlugins(), groupId, artifactId );
+ String key = Plugin.constructKey( groupId, artifactId );
+ Plugin plugin = (Plugin) project.getBuild().getPluginsAsMap().get( key );
if ( plugin == null )
{
plugin = new Plugin();
plugin.setGroupId( groupId );
plugin.setArtifactId( artifactId );
+
+ Plugin def = (Plugin) project.getPluginManagement().getPluginsAsMap().get( key );
+ if ( def != null )
+ {
+ modelDefaultsInjector.mergePluginWithDefaults( plugin, def );
+ }
+
project.addPlugin( plugin );
}
-
- // TODO: shouldn't have to call all the time
- modelDefaultsInjector.injectDefaults( project.getModel() );
-
- // TODO: remove - should discover the version
- plugin = findPlugin( project.getPlugins(), groupId, artifactId );
- if ( plugin.getVersion() == null )
- {
- plugin.setVersion( PluginDescriptor.getDefaultPluginVersion() );
- }
- }
-
- private static Plugin findPlugin( List plugins, String groupId, String artifactId )
- {
- Plugin plugin = null;
-
- for ( Iterator i = plugins.iterator(); i.hasNext() && plugin == null; )
- {
- Plugin p = (Plugin) i.next();
- if ( groupId.equals( p.getGroupId() ) && artifactId.equals( p.getArtifactId() ) )
- {
- plugin = p;
- }
- }
- return plugin;
}
private void processPluginConfiguration( MavenProject project, MavenSession mavenSession, Map phaseMap )
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
index 1325ea8147..4b9ff87242 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
@@ -178,6 +178,7 @@ private boolean isPluginInstalled( String groupId, String artifactId )
public void verifyPlugin( String groupId, String artifactId, MavenSession session )
throws ArtifactResolutionException, PluginManagerException
{
+ // TODO: we should we support concurrent versions
if ( !isPluginInstalled( groupId, artifactId ) )
{
MavenProject project = session.getProject();
@@ -217,10 +218,8 @@ public void verifyPlugin( String groupId, String artifactId, MavenSession sessio
{
if ( StringUtils.isEmpty( pluginConfig.getVersion() ) )
{
- // The model/project builder should have validated this already
- String message = "The maven plugin with groupId: '" + groupId + "' and artifactId: '" + artifactId +
- "' which was configured for use in this project does not have a version associated with it.";
- throw new IllegalStateException( message );
+ // TODO: this is where we go searching the repo for more information
+ version = PluginDescriptor.getDefaultPluginVersion();
}
else
{
diff --git a/maven-model/maven.mdo b/maven-model/maven.mdo
index 13efe620b9..5694d5e5be 100644
--- a/maven-model/maven.mdo
+++ b/maven-model/maven.mdo
@@ -656,9 +656,55 @@
+
+ PluginContainer
+ 3.0.0+
+
+
+ plugins
+ 4.0.0
+
+ The plugins specified here are not validated until they
+ are referenced in a POM within the group. This allows the
+ specification of a "standard" version for a particular
+ plugin.
+
+
+ Plugin
+ *
+
+
+
+
+
+ 4.0.0
+
+
+
+
Build
3.0.0+
+ PluginContainer
nagEmailAddress
@@ -841,17 +887,6 @@
]]>
String
-
- plugins
- 4.0.0
-
-
- Plugin
- *
-
-
@@ -2015,6 +2050,16 @@
}
return goalMap;
}
+
+ public String getKey()
+ {
+ return constructKey( groupId, artifactId );
+ }
+
+ public static String constructKey( String groupId, String artifactId )
+ {
+ return groupId + ":" + artifactId;
+ }
]]>
@@ -2060,25 +2105,10 @@
PluginManagement
4.0.0
+ PluginContainer
Section for management of default plugin information for use in a group of POMs.
-
-
- plugins
- 4.0.0
-
- The dependencies specified here are not validated until they
- are referenced in a POM within the group. This allows the
- specification of a "standard" version for a particular
- dependency.
-
-
- Plugin
- *
-
-
-
Reports
diff --git a/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java b/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
index b8418992db..f38d08280c 100644
--- a/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
+++ b/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
@@ -206,40 +206,26 @@ private void assemblePluginManagementInheritance( Build childBuild, Build parent
}
else
{
- List childPlugins = childPluginMgmt.getPlugins();
-
- Map mappedChildPlugins = new TreeMap();
- for ( Iterator it = childPlugins.iterator(); it.hasNext(); )
- {
- Plugin plugin = (Plugin) it.next();
- mappedChildPlugins.put( constructPluginKey( plugin ), plugin );
- }
+ Map mappedChildPlugins = childPluginMgmt.getPluginsAsMap();
for ( Iterator it = parentPluginMgmt.getPlugins().iterator(); it.hasNext(); )
{
Plugin plugin = (Plugin) it.next();
- String pluginKey = constructPluginKey( plugin );
-
- if ( !mappedChildPlugins.containsKey( pluginKey ) )
+ if ( !mappedChildPlugins.containsKey( plugin.getKey() ) )
{
childPluginMgmt.addPlugin( plugin );
}
else
{
- Plugin childPlugin = (Plugin) mappedChildPlugins.get( pluginKey );
+ Plugin childPlugin = (Plugin) mappedChildPlugins.get( plugin.getKey() );
if ( childPlugin.getVersion() == null )
{
childPlugin.setVersion( childPlugin.getVersion() );
}
- Map mappedChildGoals = new TreeMap();
- for ( Iterator itGoals = childPlugin.getGoals().iterator(); itGoals.hasNext(); )
- {
- Goal goal = (Goal) itGoals.next();
- mappedChildGoals.put( goal.getId(), goal );
- }
+ Map mappedChildGoals = childPlugin.getGoalsAsMap();
for ( Iterator itGoals = plugin.getGoals().iterator(); itGoals.hasNext(); )
{
@@ -267,11 +253,6 @@ private void assemblePluginManagementInheritance( Build childBuild, Build parent
}
}
- private String constructPluginKey( Plugin plugin )
- {
- return plugin.getGroupId() + ":" + plugin.getArtifactId();
- }
-
private void assembleDependencyManagementInheritance( Model child, Model parent )
{
DependencyManagement parentDepMgmt = parent.getDependencyManagement();
diff --git a/maven-project/src/main/java/org/apache/maven/project/injection/DefaultModelDefaultsInjector.java b/maven-project/src/main/java/org/apache/maven/project/injection/DefaultModelDefaultsInjector.java
index b94d93e529..763c89d6cd 100644
--- a/maven-project/src/main/java/org/apache/maven/project/injection/DefaultModelDefaultsInjector.java
+++ b/maven-project/src/main/java/org/apache/maven/project/injection/DefaultModelDefaultsInjector.java
@@ -41,11 +41,11 @@ public void injectDefaults( Model model )
injectDependencyDefaults( model.getDependencies(), model.getDependencyManagement() );
if ( model.getBuild() != null )
{
- injectPluginDefaults( model.getBuild().getPlugins(), model.getBuild().getPluginManagement() );
+ injectPluginDefaults( model.getBuild().getPluginsAsMap(), model.getBuild().getPluginManagement() );
}
}
- private void injectPluginDefaults( List plugins, PluginManagement pluginManagement )
+ private void injectPluginDefaults( Map pluginMap, PluginManagement pluginManagement )
{
if ( pluginManagement != null )
{
@@ -55,22 +55,13 @@ private void injectPluginDefaults( List plugins, PluginManagement pluginManageme
// of
// those specified in defaults.
- // TODO: share with inheritence assembler
- Map pluginMap = new TreeMap();
- for ( Iterator it = plugins.iterator(); it.hasNext(); )
- {
- Plugin plugin = (Plugin) it.next();
- pluginMap.put( constructPluginKey( plugin ), plugin );
- }
-
List managedPlugins = pluginManagement.getPlugins();
for ( Iterator it = managedPlugins.iterator(); it.hasNext(); )
{
Plugin def = (Plugin) it.next();
- String key = constructPluginKey( def );
- Plugin plugin = (Plugin) pluginMap.get( key );
+ Plugin plugin = (Plugin) pluginMap.get( def.getKey() );
if ( plugin != null )
{
mergePluginWithDefaults( plugin, def );
@@ -79,31 +70,14 @@ private void injectPluginDefaults( List plugins, PluginManagement pluginManageme
}
}
- private static String constructPluginKey( Plugin plugin )
- {
- return plugin.getGroupId() + ":" + plugin.getArtifactId();
- }
-
- private void mergePluginWithDefaults( Plugin plugin, Plugin def )
+ public void mergePluginWithDefaults( Plugin plugin, Plugin def )
{
if ( plugin.getVersion() == null && def.getVersion() != null )
{
plugin.setVersion( def.getVersion() );
}
- Map defaultGoals = new TreeMap();
-
- List defGoalList = def.getGoals();
-
- if ( defGoalList != null )
- {
- for ( Iterator it = defGoalList.iterator(); it.hasNext(); )
- {
- Goal defaultGoal = (Goal) it.next();
-
- defaultGoals.put( defaultGoal.getId(), defaultGoal );
- }
- }
+ Map defaultGoals = def.getGoalsAsMap();
List pluginGoals = plugin.getGoals();
diff --git a/maven-project/src/main/java/org/apache/maven/project/injection/ModelDefaultsInjector.java b/maven-project/src/main/java/org/apache/maven/project/injection/ModelDefaultsInjector.java
index 2f078bc5f1..e2d2dd7e8b 100644
--- a/maven-project/src/main/java/org/apache/maven/project/injection/ModelDefaultsInjector.java
+++ b/maven-project/src/main/java/org/apache/maven/project/injection/ModelDefaultsInjector.java
@@ -17,6 +17,7 @@
*/
import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
/**
* @author jdcasey Created on Feb 1, 2005
@@ -26,4 +27,6 @@ public interface ModelDefaultsInjector
String ROLE = ModelDefaultsInjector.class.getName();
void injectDefaults( Model model );
+
+ void mergePluginWithDefaults( Plugin plugin, Plugin def );
}
\ No newline at end of file