You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by pg...@apache.org on 2012/05/09 02:07:59 UTC

svn commit: r1335846 - /maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java

Author: pgier
Date: Wed May  9 00:07:59 2012
New Revision: 1335846

URL: http://svn.apache.org/viewvc?rev=1335846&view=rev
Log:
[MENFORCER-98] Check for API differences between Maven 2 and 3
Patch Submitted by: Jeff Maury

o Applied with some minor changes

Modified:
    maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java

Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java?rev=1335846&r1=1335845&r2=1335846&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java Wed May  9 00:07:59 2012
@@ -21,6 +21,7 @@ package org.apache.maven.plugins.enforce
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -128,7 +129,7 @@ public class RequirePluginVersions
     private Map phaseToLifecycleMap;
 
     /** The lifecycles. */
-    private List lifecycles;
+    private Collection lifecycles;
 
     /** The factory. */
     ArtifactFactory factory;
@@ -169,21 +170,21 @@ public class RequirePluginVersions
             project = (MavenProject) helper.evaluate( "${project}" );
             LifecycleExecutor life;
             life = (LifecycleExecutor) helper.getComponent( LifecycleExecutor.class );
-            try
-            {
-              lifecycles = (List) ReflectionUtils.getValueIncludingSuperclasses( "lifecycles", life );
+
+            // The lifecycle API changed from Maven 2 to 3 so we have to do a hack to figure
+            // out which one we're using.
+            Field field = ReflectionUtils.getFieldByNameIncludingSuperclasses( "defaultLifeCycles", life.getClass() );
+            if (field != null) // Using Maven 3
+            {
+                Object defaultLifeCycles = ReflectionUtils.getValueIncludingSuperclasses("defaultLifeCycles", life);
+                Map lifecyclesMap = (Map)ReflectionUtils.getValueIncludingSuperclasses("lifecycles", defaultLifeCycles);
+                lifecycles = lifecyclesMap.values();
             }
-            catch (Exception e)
+            else  // Using Maven 2
             {
-                log.info( "The requirePluginVersions rule is currently not compatible with Maven3.");
-                /*
-                 *
-                 * NOTE: If this happens, we're bailing out right away.
-                 *
-                 *
-                 */
-                return;
+                lifecycles = (Collection) ReflectionUtils.getValueIncludingSuperclasses( "lifecycles", life );
             }
+
             session = (MavenSession) helper.evaluate( "${session}" );
             pluginManager = (PluginManager) helper.getComponent( PluginManager.class );
             factory = (ArtifactFactory) helper.getComponent( ArtifactFactory.class );