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 ) );