Index: src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
===================================================================
--- src/test/java/org/apache/maven/archiver/MavenArchiverTest.java	(revision 442126)
+++ src/test/java/org/apache/maven/archiver/MavenArchiverTest.java	(working copy)
@@ -19,6 +19,7 @@
 import junit.framework.TestCase;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.model.Model;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.archiver.jar.Manifest;
@@ -139,7 +140,17 @@
         final File tempFile = File.createTempFile( "maven-archiver-test-", ".jar" );
 
         try {
-            MavenArchiver archiver = new MavenArchiver();    	
+            MavenArchiver archiver = new MavenArchiver() {
+                // maxb notes: Here we have to re-override our replacement
+                // method to call the original method name instead, since in
+                // the MavenProject instantiation below, the original method is
+                // redefined to something entirely different.
+                protected List projectGetRuntimeClasspathElementsReplacement( MavenProject project )
+                    throws DependencyResolutionRequiredException
+                {
+                    return project.getRuntimeClasspathElements();
+                }
+            };
 
             Model model = new Model();
             model.setArtifactId( "dummy" );
Index: src/main/java/org/apache/maven/archiver/MavenArchiver.java
===================================================================
--- src/main/java/org/apache/maven/archiver/MavenArchiver.java	(revision 442126)
+++ src/main/java/org/apache/maven/archiver/MavenArchiver.java	(working copy)
@@ -18,6 +18,8 @@
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.archiver.ArchiverException;
 import org.codehaus.plexus.archiver.jar.JarArchiver;
@@ -28,6 +30,7 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -115,6 +118,49 @@
         }
     }
 
+    protected List projectGetRuntimeClasspathElementsReplacement( MavenProject project )
+        throws DependencyResolutionRequiredException
+    {
+        // This is a copy of MavenProject.getRuntimeClasspathElements(), but is
+        // modified as indicated below ("BEGIN FIX", "END FIX") to do the right
+        // thing when confronted with build-timestamped snapshot versions.
+        // Note that as this code is copied from maven-project 2.0.4, it may
+        // need updating when future Maven versions are released.
+
+        List list = new ArrayList( project.getArtifacts().size() + 1 );
+
+        list.add( project.getBuild().getOutputDirectory() );
+
+        for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
+        {
+            Artifact a = (Artifact) i.next();
+
+            if ( a.getArtifactHandler().isAddedToClasspath() )
+            {
+                // TODO: let the scope handler deal with this
+                if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) )
+                {
+                    File file = a.getFile();
+                    if ( file == null )
+                    {
+                        throw new DependencyResolutionRequiredException( a );
+                    }
+                    // BEGIN FIX
+                    // Ideally:
+                    //   ArtifactRepository repos = a.getRepository();
+                    //   file = new File( repos.getBasedir(), repos.pathOf( a ) );
+                    // but, a.getRepository() returns null.
+                    // So, perform a heinous hack:
+                    ArtifactRepositoryLayout reposLayout = new DefaultRepositoryLayout();
+                    file = new File( file.getParent(), new File( reposLayout.pathOf( a ) ).getName() );
+                    // END FIX
+                    list.add( file.getPath() );
+                }
+            }
+        }
+        return list;
+    }
+
     protected Manifest getManifest( MavenProject project, ManifestConfiguration config, Map entries )
         throws ManifestException, DependencyResolutionRequiredException
     {
@@ -129,7 +175,7 @@
         if ( config.isAddClasspath() )
         {
             StringBuffer classpath = new StringBuffer();
-            List artifacts = project.getRuntimeClasspathElements();
+            List artifacts = projectGetRuntimeClasspathElementsReplacement(project);
             String classpathPrefix = config.getClasspathPrefix();
 
             for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
@@ -382,7 +428,7 @@
         // make the archiver index the jars on the classpath, if we are adding that to the manifest
         if ( archiveConfiguration.getManifest().isAddClasspath() )
         {
-            List artifacts = project.getRuntimeClasspathElements();
+            List artifacts = projectGetRuntimeClasspathElementsReplacement(project);
             for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
             {
                 File f = new File( (String) iter.next() );

