You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/09/22 21:58:52 UTC

svn commit: r697965 - in /maven/shared/trunk/maven-archiver/src: main/java/org/apache/maven/archiver/ test/java/org/apache/maven/archiver/ test/resources/

Author: jdcasey
Date: Mon Sep 22 12:58:52 2008
New Revision: 697965

URL: http://svn.apache.org/viewvc?rev=697965&view=rev
Log:
[MSHARED-36] Switch to using the timestamp/buildnumber version for classpath entries by default, customizable using the custom classpathLayoutType and a specified customClasspathLayout configuration. Unit tests included.

Added:
    maven/shared/trunk/maven-archiver/src/test/resources/dummy1-1.1-20081022.112233-1.jar   (with props)
Modified:
    maven/shared/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java
    maven/shared/trunk/maven-archiver/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
    maven/shared/trunk/maven-archiver/src/test/java/org/apache/maven/archiver/MockArtifact.java

Modified: maven/shared/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java?rev=697965&r1=697964&r2=697965&view=diff
==============================================================================
--- maven/shared/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java (original)
+++ maven/shared/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java Mon Sep 22 12:58:52 2008
@@ -31,7 +31,6 @@
 import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
 import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
 import org.codehaus.plexus.interpolation.PrefixedPropertiesValueSource;
-import org.codehaus.plexus.interpolation.PrefixedValueSourceWrapper;
 import org.codehaus.plexus.interpolation.RecursionInterceptor;
 import org.codehaus.plexus.interpolation.StringSearchInterpolator;
 import org.codehaus.plexus.interpolation.ValueSource;
@@ -53,6 +52,13 @@
  */
 public class MavenArchiver
 {
+    
+    public static final String SIMPLE_LAYOUT = "${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}";
+
+    public static final String REPOSITORY_LAYOUT = "${artifact.groupIdPath}/${artifact.artifactId}/" +
+    		"${artifact.baseVersion}/${artifact.artifactId}-" +
+    		"${artifact.version}${dashClassifier?}.${artifact.extension}";
+    
     private static final List ARTIFACT_EXPRESSION_PREFIXES;
     
     static
@@ -206,38 +212,12 @@
                     classpath.append( classpathPrefix );
                     
                     // NOTE: If the artifact or layout type (from config) is null, give up and use the file name by itself.
-                    if ( artifact == null || layoutType == null
-                        || ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_SIMPLE.equals( layoutType ) )
+                    if ( artifact == null || layoutType == null )
                     {
                         classpath.append( f.getName() );
                     }
-                    else if ( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_REPOSITORY.equals( layoutType ) )
-                    {
-                        // we use layout /$groupId[0]/../${groupId[n]/$artifactId/$version/{fileName}
-                        // here we must find the Artifact in the project Artifacts to generate the maven layout
-                        StringBuffer classpathElement = new StringBuffer();
-                        if ( !StringUtils.isEmpty( artifact.getGroupId() ) )
-                        {
-                            classpathElement.append( artifact.getGroupId().replace( '.', '/' ) ).append( '/' );
-                        }
-                        classpathElement.append( artifact.getArtifactId() ).append( '/' );
-                        classpathElement.append( artifact.getVersion() ).append( '/' );
-                        classpathElement.append( f.getName() );
-                        classpath.append( classpathElement );
-                    }
-                    else if ( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM.equals( layoutType ) )
+                    else
                     {
-                        if ( layout == null )
-                        {
-                            throw new ManifestException(
-                                                         ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM
-                                                             + " layout type was declared, but custom layout expression was not specified. Check your <archive><manifest><customLayout/> element." );
-                        }
-                        
-                        // FIXME: This query method SHOULD NOT affect the internal
-                        // state of the artifact version, but it does.
-                        artifact.isSnapshot();
-                        
                         List valueSources = new ArrayList();
                         valueSources.add( new PrefixedObjectValueSource( ARTIFACT_EXPRESSION_PREFIXES, artifact, true ) );
                         valueSources.add( new PrefixedObjectValueSource( ARTIFACT_EXPRESSION_PREFIXES, artifact == null ? null : artifact.getArtifactHandler(), true ) );
@@ -245,6 +225,13 @@
                         Properties extraExpressions = new Properties();
                         if ( artifact != null )
                         {
+                            // FIXME: This query method SHOULD NOT affect the internal
+                            // state of the artifact version, but it does.
+                            if ( !artifact.isSnapshot() )
+                            {
+                                extraExpressions.setProperty( "baseVersion", artifact.getVersion() );
+                            }
+                            
                             extraExpressions.setProperty( "groupIdPath", artifact.getGroupId().replace( '.', '/' ) );
                             if ( artifact.getClassifier() != null )
                             {
@@ -266,9 +253,35 @@
                         }
                         
                         RecursionInterceptor recursionInterceptor = new PrefixAwareRecursionInterceptor( ARTIFACT_EXPRESSION_PREFIXES );
+                        
                         try
                         {
-                            classpath.append( interpolator.interpolate( layout, recursionInterceptor ) );
+                            if ( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_SIMPLE.equals( layoutType ) )
+                            {
+                                classpath.append( interpolator.interpolate( SIMPLE_LAYOUT, recursionInterceptor ) );
+                            }
+                            else if ( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_REPOSITORY.equals( layoutType ) )
+                            {
+                                // we use layout /$groupId[0]/../${groupId[n]/$artifactId/$version/{fileName}
+                                // here we must find the Artifact in the project Artifacts to generate the maven layout
+                                classpath.append( interpolator.interpolate( REPOSITORY_LAYOUT, recursionInterceptor ) );
+                            }
+                            else if ( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM.equals( layoutType ) )
+                            {
+                                if ( layout == null )
+                                {
+                                    throw new ManifestException(
+                                                                 ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM
+                                                                     + " layout type was declared, but custom layout expression was not specified. Check your <archive><manifest><customLayout/> element." );
+                                }
+                                
+                                classpath.append( interpolator.interpolate( layout, recursionInterceptor ) );
+                            }
+                            else
+                            {
+                                throw new ManifestException( "Unknown classpath layout type: '" + layoutType
+                                    + "'. Check your <archive><manifest><layoutType/> element." );
+                            }
                         }
                         catch ( InterpolationException e )
                         {
@@ -288,11 +301,6 @@
                             }
                         }
                     }
-                    else
-                    {
-                        throw new ManifestException( "Unknown classpath layout type: '" + layoutType
-                            + "'. Check your <archive><manifest><layoutType/> element." );
-                    }
                 }
             }
 

Modified: maven/shared/trunk/maven-archiver/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-archiver/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java?rev=697965&r1=697964&r2=697965&view=diff
==============================================================================
--- maven/shared/trunk/maven-archiver/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java (original)
+++ maven/shared/trunk/maven-archiver/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java Mon Sep 22 12:58:52 2008
@@ -410,19 +410,19 @@
 
             assertEquals( "Apache Maven", manifest.get( new Attributes.Name( "Created-By" ) ) );
             assertEquals( "archiver test", manifest.get( Attributes.Name.SPECIFICATION_TITLE ) );// "Specification-Title"
-                                                                                                 // ) );
+            // ) );
             assertEquals( "0.1", manifest.get( Attributes.Name.SPECIFICATION_VERSION ) );// "Specification-Version" ) );
             assertEquals( "Apache", manifest.get( Attributes.Name.SPECIFICATION_VENDOR ) );// "Specification-Vendor" )
-                                                                                           // );
+            // );
 
             assertEquals( "archiver test", manifest.get( Attributes.Name.IMPLEMENTATION_TITLE ) );// "Implementation-Title"
-                                                                                                  // ) );
+            // ) );
             assertEquals( "0.1", manifest.get( Attributes.Name.IMPLEMENTATION_VERSION ) );// "Implementation-Version" )
-                                                                                          // );
+            // );
             assertEquals( "org.apache.dummy", manifest.get( Attributes.Name.IMPLEMENTATION_VENDOR_ID ) );// "Implementation-Vendor-Id"
-                                                                                                         // ) );
+            // ) );
             assertEquals( "Apache", manifest.get( Attributes.Name.IMPLEMENTATION_VENDOR ) );// "Implementation-Vendor" )
-                                                                                            // );
+            // );
             assertEquals( "org.apache.maven.Foo", manifest.get( Attributes.Name.MAIN_CLASS ) );// "Main-Class" ) );
 
             assertEquals( "bar", manifest.get( new Attributes.Name( "foo" ) ) );
@@ -521,6 +521,50 @@
         }
     }
 
+    public void testDefaultClassPathValue_WithSnapshot()
+        throws Exception
+    {
+        MavenProject project = getDummyProjectWithSnapshot();
+        JarFile jar = null;
+        try
+        {
+            File jarFile = new File( "target/test/dummy.jar" );
+            jarFile.delete();
+            assertFalse( jarFile.exists() );
+            JarArchiver jarArchiver = new JarArchiver();
+            jarArchiver.setDestFile( jarFile );
+
+            MavenArchiver archiver = new MavenArchiver();
+            archiver.setArchiver( jarArchiver );
+            archiver.setOutputFile( jarArchiver.getDestFile() );
+
+            MavenArchiveConfiguration config = new MavenArchiveConfiguration();
+            config.setForced( true );
+            config.getManifest().setAddDefaultImplementationEntries( true );
+            config.getManifest().setAddDefaultSpecificationEntries( true );
+            config.getManifest().setMainClass( "org.apache.maven.Foo" );
+            config.getManifest().setAddClasspath( true );
+            archiver.createArchive( project, config );
+            assertTrue( jarFile.exists() );
+            jar = new JarFile( jarFile );
+
+            String classPath = jar.getManifest().getMainAttributes().getValue( Attributes.Name.CLASS_PATH );
+            assertNotNull( classPath );
+            String[] classPathEntries = StringUtils.split( classPath, " " );
+            assertEquals( "dummy1-1.1-20081022.112233-1.jar", classPathEntries[0] );
+            assertEquals( "dummy2-1.5.jar", classPathEntries[1] );
+            assertEquals( "dummy3-2.0.jar", classPathEntries[2] );
+        }
+        finally
+        {
+            // cleanup streams
+            if ( jar != null )
+            {
+                jar.close();
+            }
+        }
+    }
+
     public void testMavenRepoClassPathValue()
         throws Exception
     {
@@ -576,6 +620,61 @@
         }
     }
 
+    public void testMavenRepoClassPathValue_WithSnapshot()
+        throws Exception
+    {
+        MavenProject project = getDummyProjectWithSnapshot();
+        JarFile jar = null;
+        try
+        {
+            File jarFile = new File( "target/test/dummy.jar" );
+            jarFile.delete();
+            assertFalse( jarFile.exists() );
+            JarArchiver jarArchiver = new JarArchiver();
+            jarArchiver.setDestFile( jarFile );
+
+            MavenArchiver archiver = new MavenArchiver();
+            archiver.setArchiver( jarArchiver );
+            archiver.setOutputFile( jarArchiver.getDestFile() );
+
+            MavenArchiveConfiguration config = new MavenArchiveConfiguration();
+            config.setForced( true );
+            config.getManifest().setAddDefaultImplementationEntries( true );
+            config.getManifest().setAddDefaultSpecificationEntries( true );
+            config.getManifest().setMainClass( "org.apache.maven.Foo" );
+            config.getManifest().setAddClasspath( true );
+            config.getManifest().setClasspathLayoutType( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_REPOSITORY );
+            archiver.createArchive( project, config );
+            assertTrue( jarFile.exists() );
+            jar = new JarFile( jarFile );
+
+            Manifest manifest = archiver.getManifest( project, config );
+            String[] classPathEntries =
+                StringUtils.split(
+                                   new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ),
+                                   " " );
+            assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/dummy1-1.1-20081022.112233-1.jar", classPathEntries[0] );
+            assertEquals( "org/apache/dummy/foo/dummy2/1.5/dummy2-1.5.jar", classPathEntries[1] );
+            assertEquals( "org/apache/dummy/bar/dummy3/2.0/dummy3-2.0.jar", classPathEntries[2] );
+
+            String classPath = jar.getManifest().getMainAttributes().getValue( Attributes.Name.CLASS_PATH );
+            assertNotNull( classPath );
+            classPathEntries = StringUtils.split( classPath, " " );
+            assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/dummy1-1.1-20081022.112233-1.jar", classPathEntries[0] );
+            assertEquals( "org/apache/dummy/foo/dummy2/1.5/dummy2-1.5.jar", classPathEntries[1] );
+            assertEquals( "org/apache/dummy/bar/dummy3/2.0/dummy3-2.0.jar", classPathEntries[2] );
+
+        }
+        finally
+        {
+            // cleanup streams
+            if ( jar != null )
+            {
+                jar.close();
+            }
+        }
+    }
+
     public void testCustomClassPathValue()
         throws Exception
     {
@@ -600,7 +699,8 @@
             config.getManifest().setMainClass( "org.apache.maven.Foo" );
             config.getManifest().setAddClasspath( true );
             config.getManifest().setClasspathLayoutType( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM );
-            config.getManifest().setCustomClasspathLayout( "${artifact.groupIdPath}/${artifact.artifactId}/${artifact.version}/TEST-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}" );
+            config.getManifest().setCustomClasspathLayout(
+                                                           "${artifact.groupIdPath}/${artifact.artifactId}/${artifact.version}/TEST-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}" );
             archiver.createArchive( project, config );
             assertTrue( jarFile.exists() );
             jar = new JarFile( jarFile );
@@ -632,6 +732,120 @@
         }
     }
 
+    public void testCustomClassPathValue_WithSnapshotResolvedVersion()
+        throws Exception
+    {
+        MavenProject project = getDummyProjectWithSnapshot();
+        JarFile jar = null;
+        try
+        {
+            File jarFile = new File( "target/test/dummy.jar" );
+            jarFile.delete();
+            assertFalse( jarFile.exists() );
+            JarArchiver jarArchiver = new JarArchiver();
+            jarArchiver.setDestFile( jarFile );
+
+            MavenArchiver archiver = new MavenArchiver();
+            archiver.setArchiver( jarArchiver );
+            archiver.setOutputFile( jarArchiver.getDestFile() );
+
+            MavenArchiveConfiguration config = new MavenArchiveConfiguration();
+            config.setForced( true );
+            config.getManifest().setAddDefaultImplementationEntries( true );
+            config.getManifest().setAddDefaultSpecificationEntries( true );
+            config.getManifest().setMainClass( "org.apache.maven.Foo" );
+            config.getManifest().setAddClasspath( true );
+            config.getManifest().setClasspathLayoutType( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM );
+            config.getManifest().setCustomClasspathLayout(
+                                                           "${artifact.groupIdPath}/${artifact.artifactId}/${artifact.baseVersion}/TEST-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}" );
+            archiver.createArchive( project, config );
+            assertTrue( jarFile.exists() );
+            jar = new JarFile( jarFile );
+
+            Manifest manifest = archiver.getManifest( project, config );
+            String[] classPathEntries =
+                StringUtils.split(
+                                   new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ),
+                                   " " );
+            assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/TEST-dummy1-1.1-20081022.112233-1.jar", classPathEntries[0] );
+            assertEquals( "org/apache/dummy/foo/dummy2/1.5/TEST-dummy2-1.5.jar", classPathEntries[1] );
+            assertEquals( "org/apache/dummy/bar/dummy3/2.0/TEST-dummy3-2.0.jar", classPathEntries[2] );
+
+            String classPath = jar.getManifest().getMainAttributes().getValue( Attributes.Name.CLASS_PATH );
+            assertNotNull( classPath );
+            classPathEntries = StringUtils.split( classPath, " " );
+            assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/TEST-dummy1-1.1-20081022.112233-1.jar", classPathEntries[0] );
+            assertEquals( "org/apache/dummy/foo/dummy2/1.5/TEST-dummy2-1.5.jar", classPathEntries[1] );
+            assertEquals( "org/apache/dummy/bar/dummy3/2.0/TEST-dummy3-2.0.jar", classPathEntries[2] );
+
+        }
+        finally
+        {
+            // cleanup streams
+            if ( jar != null )
+            {
+                jar.close();
+            }
+        }
+    }
+
+    public void testCustomClassPathValue_WithSnapshotForcingBaseVersion()
+        throws Exception
+    {
+        MavenProject project = getDummyProjectWithSnapshot();
+        JarFile jar = null;
+        try
+        {
+            File jarFile = new File( "target/test/dummy.jar" );
+            jarFile.delete();
+            assertFalse( jarFile.exists() );
+            JarArchiver jarArchiver = new JarArchiver();
+            jarArchiver.setDestFile( jarFile );
+
+            MavenArchiver archiver = new MavenArchiver();
+            archiver.setArchiver( jarArchiver );
+            archiver.setOutputFile( jarArchiver.getDestFile() );
+
+            MavenArchiveConfiguration config = new MavenArchiveConfiguration();
+            config.setForced( true );
+            config.getManifest().setAddDefaultImplementationEntries( true );
+            config.getManifest().setAddDefaultSpecificationEntries( true );
+            config.getManifest().setMainClass( "org.apache.maven.Foo" );
+            config.getManifest().setAddClasspath( true );
+            config.getManifest().setClasspathLayoutType( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM );
+            config.getManifest().setCustomClasspathLayout(
+                                                           "${artifact.groupIdPath}/${artifact.artifactId}/${artifact.baseVersion}/TEST-${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}" );
+            archiver.createArchive( project, config );
+            assertTrue( jarFile.exists() );
+            jar = new JarFile( jarFile );
+
+            Manifest manifest = archiver.getManifest( project, config );
+            String[] classPathEntries =
+                StringUtils.split(
+                                   new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ),
+                                   " " );
+            assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/TEST-dummy1-1.1-SNAPSHOT.jar", classPathEntries[0] );
+            assertEquals( "org/apache/dummy/foo/dummy2/1.5/TEST-dummy2-1.5.jar", classPathEntries[1] );
+            assertEquals( "org/apache/dummy/bar/dummy3/2.0/TEST-dummy3-2.0.jar", classPathEntries[2] );
+
+            String classPath = jar.getManifest().getMainAttributes().getValue( Attributes.Name.CLASS_PATH );
+            assertNotNull( classPath );
+            classPathEntries = StringUtils.split( classPath, " " );
+            assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/TEST-dummy1-1.1-SNAPSHOT.jar", classPathEntries[0] );
+            assertEquals( "org/apache/dummy/foo/dummy2/1.5/TEST-dummy2-1.5.jar", classPathEntries[1] );
+            assertEquals( "org/apache/dummy/bar/dummy3/2.0/TEST-dummy3-2.0.jar", classPathEntries[2] );
+
+        }
+        finally
+        {
+            // cleanup streams
+            if ( jar != null )
+            {
+                jar.close();
+            }
+        }
+    }
+
     // ----------------------------------------
     // common methods for testing
     // ----------------------------------------
@@ -716,8 +930,7 @@
         artifact1.setVersion( "1.0" );
         artifact1.setType( "jar" );
         artifact1.setScope( "runtime" );
-        artifact1.setFile( getClasspathFile( artifact1.getArtifactId() + "-" + artifact1.getVersion()
-            + ".jar" ) );
+        artifact1.setFile( getClasspathFile( artifact1.getArtifactId() + "-" + artifact1.getVersion() + ".jar" ) );
 
         artifact1.setArtifactHandler( artifactHandler );
 
@@ -729,8 +942,7 @@
         artifact2.setVersion( "1.5" );
         artifact2.setType( "jar" );
         artifact2.setScope( "runtime" );
-        artifact2.setFile( getClasspathFile( artifact2.getArtifactId() + "-" + artifact2.getVersion()
-            + ".jar" ) );
+        artifact2.setFile( getClasspathFile( artifact2.getArtifactId() + "-" + artifact2.getVersion() + ".jar" ) );
 
         artifact2.setArtifactHandler( artifactHandler );
         artifacts.add( artifact2 );
@@ -741,8 +953,119 @@
         artifact3.setVersion( "2.0" );
         artifact3.setScope( "runtime" );
         artifact3.setType( "jar" );
-        artifact3.setFile( getClasspathFile( artifact3.getArtifactId() + "-" + artifact3.getVersion()
-            + ".jar" ) );
+        artifact3.setFile( getClasspathFile( artifact3.getArtifactId() + "-" + artifact3.getVersion() + ".jar" ) );
+        artifact3.setArtifactHandler( artifactHandler );
+        artifacts.add( artifact3 );
+
+        project.setArtifacts( artifacts );
+
+        return project;
+    }
+
+    private MavenProject getDummyProjectWithSnapshot()
+    {
+        Model model = new Model();
+        model.setGroupId( "org.apache.dummy" );
+        model.setArtifactId( "dummy" );
+        model.setVersion( "0.1" );
+        MavenProject project = new MavenProject( model );
+
+        project.setPluginArtifacts( Collections.EMPTY_SET );
+        project.setReportArtifacts( Collections.EMPTY_SET );
+        project.setExtensionArtifacts( Collections.EMPTY_SET );
+        project.setRemoteArtifactRepositories( Collections.EMPTY_LIST );
+        project.setPluginArtifactRepositories( Collections.EMPTY_LIST );
+
+        File pomFile = new File( "src/test/resources/pom.xml" );
+        pomFile.setLastModified( System.currentTimeMillis() - 60000L );
+        project.setFile( pomFile );
+        Build build = new Build();
+        build.setDirectory( "target" );
+        build.setOutputDirectory( "target" );
+        project.setBuild( build );
+        project.setName( "archiver test" );
+        Organization organization = new Organization();
+        organization.setName( "Apache" );
+        project.setOrganization( organization );
+        MockArtifact artifact = new MockArtifact();
+        artifact.setGroupId( "org.apache.dummy" );
+        artifact.setArtifactId( "dummy" );
+        artifact.setVersion( "0.1" );
+        artifact.setType( "jar" );
+        project.setArtifact( artifact );
+
+        ArtifactHandler artifactHandler = new ArtifactHandler()
+        {
+
+            public String getClassifier()
+            {
+                return null;
+            }
+
+            public String getDirectory()
+            {
+                return null;
+            }
+
+            public String getExtension()
+            {
+                return "jar";
+            }
+
+            public String getLanguage()
+            {
+                return null;
+            }
+
+            public String getPackaging()
+            {
+                return null;
+            }
+
+            public boolean isAddedToClasspath()
+            {
+                return true;
+            }
+
+            public boolean isIncludesDependencies()
+            {
+                return false;
+            }
+
+        };
+
+        Set artifacts = new TreeSet( new ArtifactComparator() );
+
+        MockArtifact artifact1 = new MockArtifact();
+        artifact1.setGroupId( "org.apache.dummy" );
+        artifact1.setArtifactId( "dummy1" );
+        artifact1.setSnapshotVersion( "1.1-20081022.112233-1", "1.1-SNAPSHOT" );
+        artifact1.setType( "jar" );
+        artifact1.setScope( "runtime" );
+        artifact1.setFile( getClasspathFile( artifact1.getArtifactId() + "-" + artifact1.getVersion() + ".jar" ) );
+
+        artifact1.setArtifactHandler( artifactHandler );
+
+        artifacts.add( artifact1 );
+
+        MockArtifact artifact2 = new MockArtifact();
+        artifact2.setGroupId( "org.apache.dummy.foo" );
+        artifact2.setArtifactId( "dummy2" );
+        artifact2.setVersion( "1.5" );
+        artifact2.setType( "jar" );
+        artifact2.setScope( "runtime" );
+        artifact2.setFile( getClasspathFile( artifact2.getArtifactId() + "-" + artifact2.getVersion() + ".jar" ) );
+
+        artifact2.setArtifactHandler( artifactHandler );
+        artifacts.add( artifact2 );
+
+        MockArtifact artifact3 = new MockArtifact();
+        artifact3.setGroupId( "org.apache.dummy.bar" );
+        artifact3.setArtifactId( "dummy3" );
+        artifact3.setVersion( "2.0" );
+        artifact3.setScope( "runtime" );
+        artifact3.setType( "jar" );
+        artifact3.setFile( getClasspathFile( artifact3.getArtifactId() + "-" + artifact3.getVersion() + ".jar" ) );
         artifact3.setArtifactHandler( artifactHandler );
         artifacts.add( artifact3 );
 
@@ -758,10 +1081,10 @@
         {
             fail( "Cannot retrieve java.net.URL for file: " + file + " on the current test classpath." );
         }
-        
+
         URI uri = new File( resource.getPath() ).toURI().normalize();
         File result = new File( uri.getPath().replaceAll( "%20", " " ) );
-        
+
         return result;
     }
 }

Modified: maven/shared/trunk/maven-archiver/src/test/java/org/apache/maven/archiver/MockArtifact.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-archiver/src/test/java/org/apache/maven/archiver/MockArtifact.java?rev=697965&r1=697964&r2=697965&view=diff
==============================================================================
--- maven/shared/trunk/maven-archiver/src/test/java/org/apache/maven/archiver/MockArtifact.java (original)
+++ maven/shared/trunk/maven-archiver/src/test/java/org/apache/maven/archiver/MockArtifact.java Mon Sep 22 12:58:52 2008
@@ -56,6 +56,8 @@
     
     private ArtifactHandler artifactHandler;
 
+    private boolean snapshot;
+
     public String getGroupId()
     {
         return groupId;
@@ -75,6 +77,13 @@
     {
         this.version = string;
     }
+    
+    public void setSnapshotVersion( String snapshotVersion, String baseVersion )
+    {
+        snapshot = true;
+        version = snapshotVersion;
+        this.baseVersion = baseVersion;
+    }
 
     public String getScope()
     {
@@ -218,8 +227,7 @@
 
     public boolean isSnapshot()
     {
-        // TODO
-        return false;  //To change body of implemented methods use File | Settings | File Templates.
+        return snapshot;
     }
 
     public void setResolved( boolean b )

Added: maven/shared/trunk/maven-archiver/src/test/resources/dummy1-1.1-20081022.112233-1.jar
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-archiver/src/test/resources/dummy1-1.1-20081022.112233-1.jar?rev=697965&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/shared/trunk/maven-archiver/src/test/resources/dummy1-1.1-20081022.112233-1.jar
------------------------------------------------------------------------------
    svn:executable = *

Propchange: maven/shared/trunk/maven-archiver/src/test/resources/dummy1-1.1-20081022.112233-1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream