Author: olamy
Date: Mon Nov  4 05:04:31 2013
New Revision: 1538504

URL: http://svn.apache.org/r1538504
Log:
[MTOMCAT-159] WAR dependencies extracted every run
Submitted by Robert Hollencamp

Modified:
    
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java

Modified: 
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java
URL: 
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java?rev=1538504&r1=1538503&r2=1538504&view=diff
==============================================================================
--- 
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java
 (original)
+++ 
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java
 Mon Nov  4 05:04:31 2013
@@ -88,15 +88,9 @@ public class DefaultClassLoaderEntriesCa
             throw new TomcatRunException( e.getMessage(), e );
         }
 
-        // TODO find a solution to use a timestamp marker to not 
delete/extract all the time
-
         File tmpExtractDatas =
             new File( request.getMavenProject().getBuild().getDirectory(), 
"apache-tomcat-maven-plugin" );
 
-        if ( tmpExtractDatas.exists() )
-        {
-            deleteDirectory( tmpExtractDatas, request.getLog() );
-        }
         tmpExtractDatas.mkdirs();
 
         // add artifacts to loader
@@ -138,18 +132,44 @@ public class DefaultClassLoaderEntriesCa
 
                     File tmpDir = new File( tmpExtractDatas, 
artifact.getArtifactId() );
 
-                    tmpDir.mkdirs();
+                    boolean existed = !tmpDir.mkdirs();
+                    // does a directory for this artifact already exist?
+                    if (existed)
+                    {
+                        // check timestamp to see if artifact is newer than 
extracted directory
+                        long dirLastMod = tmpDir.lastModified();
+                        long warLastMod = artifact.getFile().lastModified();
+
+                        if (warLastMod == 0L || warLastMod > dirLastMod)
+                        {
+                            request.getLog().debug(
+                                "re-exploding artifact " + 
artifact.getArtifactId() + " due to newer WAR");
+
+                            deleteDirectory( tmpDir, request.getLog() );
+                            tmpDir = new File( tmpExtractDatas, 
artifact.getArtifactId() );
+                            tmpDir.mkdirs();
+                            existed = false;
+                        }
+                        else
+                        {
+                            request.getLog().debug(
+                                "using existing exploded war for artifact " + 
artifact.getArtifactId());
+                        }
+                    }
 
                     tmpDirectories.add( tmpDir );
 
                     try
                     {
-                        tmpDir.deleteOnExit();
-                        File warFile = artifact.getFile();
-                        UnArchiver unArchiver = archiverManager.getUnArchiver( 
"jar" );
-                        unArchiver.setSourceFile( warFile );
-                        unArchiver.setDestDirectory( tmpDir );
-                        unArchiver.extract();
+                        // explode the archive if it is not already exploded
+                        if (!existed)
+                        {
+                            File warFile = artifact.getFile();
+                            UnArchiver unArchiver = 
archiverManager.getUnArchiver( "jar" );
+                            unArchiver.setSourceFile( warFile );
+                            unArchiver.setDestDirectory( tmpDir );
+                            unArchiver.extract();
+                        }
 
                         File libsDirectory = new File( tmpDir, "WEB-INF/lib" );
                         if ( libsDirectory.exists() )



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to