You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2010/04/23 22:16:12 UTC

svn commit: r937499 - /geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ArchiveCarMojo.java

Author: gawor
Date: Fri Apr 23 20:16:11 2010
New Revision: 937499

URL: http://svn.apache.org/viewvc?rev=937499&view=rev
Log:
Clean up temporary files - workaround for a bug in plexus archiver which leaves lots of 'archived-file-set' files in /tmp

Modified:
    geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ArchiveCarMojo.java

Modified: geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ArchiveCarMojo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ArchiveCarMojo.java?rev=937499&r1=937498&r2=937499&view=diff
==============================================================================
--- geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ArchiveCarMojo.java (original)
+++ geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ArchiveCarMojo.java Fri Apr 23 20:16:11 2010
@@ -20,8 +20,11 @@
 package org.apache.geronimo.mavenplugins.car;
 
 import java.io.File;
+import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.jar.JarFile;
 import java.util.zip.ZipEntry;
@@ -34,8 +37,13 @@ import org.apache.maven.artifact.version
 import org.apache.maven.model.License;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
+import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.UnArchiver;
 import org.codehaus.plexus.archiver.jar.JarArchiver;
 import org.codehaus.plexus.archiver.jar.JarArchiver.FilesetManifestConfig;
+import org.codehaus.plexus.archiver.manager.ArchiverManager;
+import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
+import org.codehaus.plexus.util.FileUtils;
 import org.osgi.framework.Constants;
 
 /**
@@ -67,6 +75,15 @@ public class ArchiveCarMojo
      * @readonly
      */
     private JarArchiver jarArchiver = null;
+    
+    /**
+     * The Jar archiver.
+     *
+     * @parameter expression="${component.org.codehaus.plexus.archiver.manager.ArchiverManager}"
+     * @required
+     * @readonly
+     */
+    private ArchiverManager archiverManager = null;
 
     /**
      * The module base directory.
@@ -192,7 +209,7 @@ public class ArchiveCarMojo
     private File createArchive() throws MojoExecutionException {
         File archiveFile = getArchiveFile(outputDirectory, finalName, null);
 
-        MavenArchiver archiver = new MavenArchiver();
+        GeronimoArchiver archiver = new GeronimoArchiver(archiverManager);
         archiver.setArchiver(jarArchiver);
         archiver.setOutputFile(archiveFile);
 
@@ -201,7 +218,7 @@ public class ArchiveCarMojo
             File artifactDirectory = getArtifactInRepositoryDir();
 
             if (artifactDirectory.exists()) {
-                archiver.getArchiver().addArchivedFileSet(artifactDirectory);
+                archiver.addArchivedFileSet(artifactDirectory);
             }
 
             // Include the optional classes.resources
@@ -299,10 +316,62 @@ public class ArchiveCarMojo
             archiver.createArchive(project, archive);
 
             return archiveFile;
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             throw new MojoExecutionException("Failed to create archive", e);
+        } finally {
+            archiver.cleanup();
         }
     }
+    
+    private static class GeronimoArchiver extends MavenArchiver {
+        
+        private ArchiverManager archiverManager;
+        private List<File> tmpDirs = new ArrayList<File>();
+        
+        public GeronimoArchiver(ArchiverManager archiverManager) {
+            this.archiverManager = archiverManager;
+        }
+        
+        public void addArchivedFileSet(File archiveFile) throws ArchiverException {
+            UnArchiver unArchiver;
+            try {
+                unArchiver = archiverManager.getUnArchiver(archiveFile);
+            } catch (NoSuchArchiverException e) {
+                throw new ArchiverException(
+                        "Error adding archived file-set. UnArchiver not found for: " + archiveFile,
+                        e);
+            }
 
+            File tempDir = FileUtils.createTempFile("archived-file-set.", ".tmp", null);
+
+            tempDir.mkdirs();
+
+            tmpDirs.add(tempDir); 
+            
+            unArchiver.setSourceFile(archiveFile);
+            unArchiver.setDestDirectory(tempDir);
+
+            try {
+                unArchiver.extract();
+            } catch (IOException e) {
+                throw new ArchiverException("Error adding archived file-set. Failed to extract: "
+                                            + archiveFile, e);
+            }
+
+            getArchiver().addDirectory(tempDir, null, null, null);
+        }
+        
+        public void cleanup() {
+            for (File dir : tmpDirs) {
+                try {
+                    FileUtils.deleteDirectory(dir);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            tmpDirs.clear();        
+        }
+        
+    }
+    
 }
\ No newline at end of file