You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kr...@apache.org on 2010/05/27 22:50:53 UTC

svn commit: r948982 - in /maven/plugins/trunk/maven-war-plugin/src: main/java/org/apache/maven/plugin/war/ main/java/org/apache/maven/plugin/war/overlay/ main/java/org/apache/maven/plugin/war/packaging/ test/java/org/apache/maven/plugin/war/ test/java/...

Author: krosenvold
Date: Thu May 27 20:50:53 2010
New Revision: 948982

URL: http://svn.apache.org/viewvc?rev=948982&view=rev
Log:
[MWAR-226] Made war plugin @threadSafe

This included a series of refactorings to bring current project overlay construction from static factory method to outer mojo

Modified:
    maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/AbstractWarMojo.java
    maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/Overlay.java
    maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/overlay/OverlayManager.java
    maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/ArtifactsPackagingTask.java
    maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/ClassesPackagingTask.java
    maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/OverlayPackagingTask.java
    maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/WarProjectPackagingTask.java
    maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/WarOverlaysTest.java
    maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/overlay/OverlayManagerTest.java

Modified: maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/AbstractWarMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/AbstractWarMojo.java?rev=948982&r1=948981&r2=948982&view=diff
==============================================================================
--- maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/AbstractWarMojo.java (original)
+++ maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/AbstractWarMojo.java Thu May 27 20:50:53 2010
@@ -313,6 +313,14 @@ public abstract class AbstractWarMojo
 
     private final WebappStructureSerializer webappStructureSerialier = new WebappStructureSerializer();
 
+    private final Overlay currentProjectOverlay = Overlay.createInstance();
+
+
+    public Overlay getCurrentProjectOverlay()
+    {
+        return currentProjectOverlay;
+    }
+
     /**
      * Returns a string array of the excludes to be used
      * when copying the content of the war source directory.
@@ -431,7 +439,7 @@ public abstract class AbstractWarMojo
         getLog().info( "Assembling webapp[" + project.getArtifactId() + "] in [" + webappDirectory + "]" );
 
         final OverlayManager overlayManager =
-            new OverlayManager( overlays, project, dependentWarIncludes, dependentWarExcludes );
+            new OverlayManager( overlays, project, dependentWarIncludes, dependentWarExcludes, currentProjectOverlay );
         final List packagingTasks = getPackagingTasks( overlayManager );
         List defaultFilterWrappers = null;
         try
@@ -499,11 +507,12 @@ public abstract class AbstractWarMojo
             Overlay overlay = (Overlay) it.next();
             if ( overlay.isCurrentProject() )
             {
-                packagingTasks.add( new WarProjectPackagingTask( webResources, webXml, containerConfigXML ) );
+                packagingTasks.add( new WarProjectPackagingTask( webResources, webXml, containerConfigXML,
+                                                                 currentProjectOverlay ) );
             }
             else
             {
-                packagingTasks.add( new OverlayPackagingTask( overlay ) );
+                packagingTasks.add( new OverlayPackagingTask( overlay, currentProjectOverlay ) );
             }
         }
         return packagingTasks;

Modified: maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/Overlay.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/Overlay.java?rev=948982&r1=948981&r2=948982&view=diff
==============================================================================
--- maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/Overlay.java (original)
+++ maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/Overlay.java Thu May 27 20:50:53 2010
@@ -47,8 +47,6 @@ public class Overlay
 
     public static final String[] DEFAULT_EXCLUDES = new String[]{"META-INF/MANIFEST.MF"};
 
-    private static Overlay currentProjectInstance;
-
     private String id;
 
     private String groupId;
@@ -95,19 +93,11 @@ public class Overlay
         return ( groupId == null && artifactId == null );
     }
 
-    /**
-     * Creates an overlay of the current project.
-     *
-     * @return the current project as an overlay
-     */
-    public static Overlay currentProjectInstance()
+    public static Overlay createInstance()
     {
-        if ( currentProjectInstance == null )
-        {
-            currentProjectInstance = new Overlay();
-            currentProjectInstance.setId( "currentBuild" );
-        }
-        return currentProjectInstance;
+        Overlay overlay = new Overlay();
+        overlay.setId( "currentBuild" );
+        return overlay;
     }
 
     // Getters and Setters

Modified: maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/overlay/OverlayManager.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/overlay/OverlayManager.java?rev=948982&r1=948981&r2=948982&view=diff
==============================================================================
--- maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/overlay/OverlayManager.java (original)
+++ maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/overlay/OverlayManager.java Thu May 27 20:50:53 2010
@@ -57,10 +57,12 @@ public class OverlayManager
      * @param project         the maven project
      * @param defaultIncludes the default includes to use
      * @param defaultExcludes the default excludes to use
+     * @param currentProjectOverlay the overlay for the current project
      * @throws InvalidOverlayConfigurationException
      *          if the config is invalid
      */
-    public OverlayManager( List overlays, MavenProject project, String defaultIncludes, String defaultExcludes )
+    public OverlayManager( List overlays, MavenProject project, String defaultIncludes, String defaultExcludes,
+                           Overlay currentProjectOverlay )
         throws InvalidOverlayConfigurationException
     {
         this.overlays = new ArrayList();
@@ -73,7 +75,7 @@ public class OverlayManager
         this.artifactsOverlays = getOverlaysAsArtifacts();
 
         // Initialize
-        initialize( defaultIncludes, defaultExcludes );
+        initialize( defaultIncludes, defaultExcludes, currentProjectOverlay );
 
     }
 
@@ -111,10 +113,11 @@ public class OverlayManager
      *
      * @param defaultIncludes the default includes to use
      * @param defaultExcludes the default excludes to use
+     * @param currentProjectOverlay  the overlay for the current project
      * @throws InvalidOverlayConfigurationException
      *          if the configuration is invalid
      */
-    void initialize( String defaultIncludes, String defaultExcludes )
+    void initialize( String defaultIncludes, String defaultExcludes, Overlay currentProjectOverlay )
         throws InvalidOverlayConfigurationException
     {
 
@@ -132,7 +135,7 @@ public class OverlayManager
             // If it's the current project, return the project instance
             if ( overlay.isCurrentProject() )
             {
-                overlay = Overlay.currentProjectInstance();
+                overlay = currentProjectOverlay;
                 it.set( overlay );
             }
             // default includes/excludes - only if the overlay uses the default settings
@@ -169,12 +172,12 @@ public class OverlayManager
         while ( it3.hasNext() )
         {
             Overlay overlay = (Overlay) it3.next();
-            if ( overlay.equals( Overlay.currentProjectInstance() ) )
+            if ( overlay.equals( currentProjectOverlay ) )
             {
                 return;
             }
         }
-        overlays.add( 0, Overlay.currentProjectInstance() );
+        overlays.add( 0, currentProjectOverlay );
     }
 
     /**

Modified: maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/ArtifactsPackagingTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/ArtifactsPackagingTask.java?rev=948982&r1=948981&r2=948982&view=diff
==============================================================================
--- maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/ArtifactsPackagingTask.java (original)
+++ maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/ArtifactsPackagingTask.java Thu May 27 20:50:53 2010
@@ -51,10 +51,10 @@ public class ArtifactsPackagingTask
     private final String id;
 
 
-    public ArtifactsPackagingTask( Set artifacts )
+    public ArtifactsPackagingTask( Set artifacts, Overlay currentProjectOverlay )
     {
         this.artifacts = artifacts;
-        this.id = Overlay.currentProjectInstance().getId();
+        this.id = currentProjectOverlay.getId();
     }
 
 

Modified: maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/ClassesPackagingTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/ClassesPackagingTask.java?rev=948982&r1=948981&r2=948982&view=diff
==============================================================================
--- maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/ClassesPackagingTask.java (original)
+++ maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/ClassesPackagingTask.java Thu May 27 20:50:53 2010
@@ -45,6 +45,12 @@ import java.io.IOException;
 public class ClassesPackagingTask
     extends AbstractWarPackagingTask
 {
+    private final Overlay currentProjectOverlay;
+
+    public ClassesPackagingTask( Overlay currentProjectOverlay )
+    {
+        this.currentProjectOverlay = currentProjectOverlay;
+    }
 
     public void performPackaging( WarPackagingContext context )
         throws MojoExecutionException
@@ -66,7 +72,7 @@ public class ClassesPackagingTask
                 final PathSet sources = getFilesToIncludes( context.getClassesDirectory(), null, null );
                 try
                 {
-                    copyFiles( Overlay.currentProjectInstance().getId(), context, context.getClassesDirectory(),
+                    copyFiles( currentProjectOverlay.getId(), context, context.getClassesDirectory(),
                                sources, CLASSES_PATH, false );
                 }
                 catch ( IOException e )
@@ -98,7 +104,7 @@ public class ClassesPackagingTask
         }
         final String targetFilename = LIB_PATH + archiveName;
 
-        if ( context.getWebappStructure().registerFile( Overlay.currentProjectInstance().getId(), targetFilename ) )
+        if ( context.getWebappStructure().registerFile( currentProjectOverlay.getId(), targetFilename ) )
         {
             final File libDirectory = new File( context.getWebappDirectory(), LIB_PATH );
             final File jarFile = new File( libDirectory, archiveName );

Modified: maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/OverlayPackagingTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/OverlayPackagingTask.java?rev=948982&r1=948981&r2=948982&view=diff
==============================================================================
--- maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/OverlayPackagingTask.java (original)
+++ maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/OverlayPackagingTask.java Thu May 27 20:50:53 2010
@@ -40,13 +40,13 @@ public class OverlayPackagingTask
     private final Overlay overlay;
 
 
-    public OverlayPackagingTask( Overlay overlay )
+    public OverlayPackagingTask( Overlay overlay, Overlay currentProjectOverlay )
     {
         if ( overlay == null )
         {
             throw new NullPointerException( "overlay could not be null." );
         }
-        if ( overlay.equals( Overlay.currentProjectInstance() ) )
+        if ( overlay.equals( currentProjectOverlay ) )
         {
             throw new IllegalStateException( "Could not handle the current project with this task." );
         }

Modified: maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/WarProjectPackagingTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/WarProjectPackagingTask.java?rev=948982&r1=948981&r2=948982&view=diff
==============================================================================
--- maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/WarProjectPackagingTask.java (original)
+++ maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/WarProjectPackagingTask.java Thu May 27 20:50:53 2010
@@ -57,8 +57,11 @@ public class WarProjectPackagingTask
 
     private final String id;
 
+    private Overlay currentProjectOverlay;
 
-    public WarProjectPackagingTask( Resource[] webResources, File webXml, File containerConfigXml )
+
+    public WarProjectPackagingTask( Resource[] webResources, File webXml, File containerConfigXml,
+                                    Overlay currentProjectOverlay )
     {
         if ( webResources != null )
         {
@@ -70,7 +73,8 @@ public class WarProjectPackagingTask
         }
         this.webXml = webXml;
         this.containerConfigXML = containerConfigXml;
-        this.id = Overlay.currentProjectInstance().getId();
+        this.currentProjectOverlay = currentProjectOverlay;
+        this.id = currentProjectOverlay.getId();
     }
 
     public void performPackaging( WarPackagingContext context )
@@ -180,7 +184,8 @@ public class WarProjectPackagingTask
     protected void handleArtifacts( WarPackagingContext context )
         throws MojoExecutionException
     {
-        ArtifactsPackagingTask task = new ArtifactsPackagingTask( context.getProject().getArtifacts() );
+        ArtifactsPackagingTask task = new ArtifactsPackagingTask( context.getProject().getArtifacts(),
+                                                                  currentProjectOverlay );
         task.performPackaging( context );
     }
 
@@ -193,7 +198,7 @@ public class WarProjectPackagingTask
     protected void handleClassesDirectory( WarPackagingContext context )
         throws MojoExecutionException
     {
-        ClassesPackagingTask task = new ClassesPackagingTask();
+        ClassesPackagingTask task = new ClassesPackagingTask( currentProjectOverlay);
         task.performPackaging( context );
     }
 

Modified: maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/WarOverlaysTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/WarOverlaysTest.java?rev=948982&r1=948981&r2=948982&view=diff
==============================================================================
--- maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/WarOverlaysTest.java (original)
+++ maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/WarOverlaysTest.java Thu May 27 20:50:53 2010
@@ -249,7 +249,7 @@ public class WarOverlaysTest
         final List overlays = new ArrayList();
 
         // Add the default project explicitely
-        overlays.add( Overlay.currentProjectInstance() );
+        overlays.add( mojo.getCurrentProjectOverlay() );
 
         // Other overlays
         overlays.add( new DefaultOverlay( overlay1 ) );
@@ -341,7 +341,7 @@ public class WarOverlaysTest
         mojo.addOverlay( over1 );
         mojo.addOverlay( over2 );
         mojo.addOverlay( over3 );
-        mojo.addOverlay( Overlay.currentProjectInstance() );
+        mojo.addOverlay( mojo.getCurrentProjectOverlay());
         mojo.addOverlay( over4 );
 
         final List assertedFiles = new ArrayList();
@@ -411,7 +411,7 @@ public class WarOverlaysTest
         mojo.addOverlay( over1 );
         mojo.addOverlay( over2 );
         mojo.addOverlay( over3 );
-        mojo.addOverlay( Overlay.currentProjectInstance() );
+        mojo.addOverlay( mojo.getCurrentProjectOverlay() );
         mojo.addOverlay( over4 );
 
         final List assertedFiles = new ArrayList();

Modified: maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/overlay/OverlayManagerTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/overlay/OverlayManagerTest.java?rev=948982&r1=948981&r2=948982&view=diff
==============================================================================
--- maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/overlay/OverlayManagerTest.java (original)
+++ maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/overlay/OverlayManagerTest.java Thu May 27 20:50:53 2010
@@ -48,10 +48,12 @@ public class OverlayManagerTest
         final List overlays = new ArrayList();
         try
         {
-            OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES );
+            final Overlay currentProjectOVerlay = Overlay.createInstance();
+            OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES,
+                                                         currentProjectOVerlay );
             assertNotNull( manager.getOverlays() );
             assertEquals( 1, manager.getOverlays().size() );
-            assertEquals( Overlay.currentProjectInstance(), manager.getOverlays().get( 0 ) );
+            assertEquals( currentProjectOVerlay, manager.getOverlays().get( 0 ) );
         }
         catch ( InvalidOverlayConfigurationException e )
         {
@@ -60,7 +62,7 @@ public class OverlayManagerTest
         }
     }
 
-    public void testAutodetectSimpleOverlay()
+    public void testAutodetectSimpleOverlay( Overlay currentProjectOverlay )
         throws Exception
     {
 
@@ -72,10 +74,12 @@ public class OverlayManagerTest
 
         try
         {
-            OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES );
+            final Overlay overlay = currentProjectOverlay;
+            OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES,
+                                                         overlay );
             assertNotNull( manager.getOverlays() );
             assertEquals( 2, manager.getOverlays().size() );
-            assertEquals( Overlay.currentProjectInstance(), manager.getOverlays().get( 0 ) );
+            assertEquals( overlay, manager.getOverlays().get( 0 ) );
             assertEquals( new DefaultOverlay( first ), manager.getOverlays().get( 1 ) );
         }
         catch ( InvalidOverlayConfigurationException e )
@@ -98,10 +102,12 @@ public class OverlayManagerTest
 
         try
         {
-            OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES );
+            final Overlay currentProjectOverlay = Overlay.createInstance();
+            OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES,
+                                                         currentProjectOverlay );
             assertNotNull( manager.getOverlays() );
             assertEquals( 2, manager.getOverlays().size() );
-            assertEquals( Overlay.currentProjectInstance(), manager.getOverlays().get( 0 ) );
+            assertEquals( Overlay.createInstance(), manager.getOverlays().get( 0 ) );
             assertEquals( overlays.get( 0 ), manager.getOverlays().get( 1 ) );
         }
         catch ( InvalidOverlayConfigurationException e )
@@ -124,7 +130,8 @@ public class OverlayManagerTest
 
         try
         {
-            new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES );
+            final Overlay currentProjectOVerlay = Overlay.createInstance();
+            new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES, currentProjectOVerlay );
             fail( "Should have failed to validate an unknown overlay" );
         }
         catch ( InvalidOverlayConfigurationException e )
@@ -145,15 +152,17 @@ public class OverlayManagerTest
 
         final List overlays = new ArrayList();
         overlays.add( new DefaultOverlay( first ) );
-        overlays.add( Overlay.currentProjectInstance() );
+        final Overlay currentProjectOverlay = Overlay.createInstance();
+        overlays.add( currentProjectOverlay );
 
         try
         {
-            OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES );
+            OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES,
+                                                         currentProjectOverlay );
             assertNotNull( manager.getOverlays() );
             assertEquals( 3, manager.getOverlays().size() );
             assertEquals( overlays.get( 0 ), manager.getOverlays().get( 0 ) );
-            assertEquals( Overlay.currentProjectInstance(), manager.getOverlays().get( 1 ) );
+            assertEquals( currentProjectOverlay, manager.getOverlays().get( 1 ) );
             assertEquals( new DefaultOverlay( second ), manager.getOverlays().get( 2 ) );
 
         }
@@ -181,10 +190,12 @@ public class OverlayManagerTest
 
         try
         {
-            OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES );
+            final Overlay currentProjectOverlay = Overlay.createInstance();
+            OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES,
+                                                         currentProjectOverlay );
             assertNotNull( manager.getOverlays() );
             assertEquals( 3, manager.getOverlays().size() );
-            assertEquals( Overlay.currentProjectInstance(), manager.getOverlays().get( 0 ) );
+            assertEquals( currentProjectOverlay, manager.getOverlays().get( 0 ) );
             assertEquals( overlays.get( 0 ), manager.getOverlays().get( 1 ) );
             assertEquals( overlays.get( 1 ), manager.getOverlays().get( 2 ) );