This is an automated email from the ASF dual-hosted git repository.

khmarbaise pushed a commit to branch MDEP-655
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git

commit 79939b56dba266fa6109cec05b585b2aa9bba3b1
Author: Karl Heinz Marbaise <khmarba...@apache.org>
AuthorDate: Thu Aug 8 22:38:38 2019 +0200

    [MDEP-655] - The unpack integration test fails intermittent.
---
 .../dependency/utils/filters/DestFileFilter.java   | 37 ++++++++++++++++----
 .../fromConfiguration/TestUnpackMojo.java          | 40 +++++++++++++++-------
 2 files changed, 58 insertions(+), 19 deletions(-)

diff --git 
a/src/main/java/org/apache/maven/plugins/dependency/utils/filters/DestFileFilter.java
 
b/src/main/java/org/apache/maven/plugins/dependency/utils/filters/DestFileFilter.java
index b19fb21..0801210 100644
--- 
a/src/main/java/org/apache/maven/plugins/dependency/utils/filters/DestFileFilter.java
+++ 
b/src/main/java/org/apache/maven/plugins/dependency/utils/filters/DestFileFilter.java
@@ -19,10 +19,6 @@ package org.apache.maven.plugins.dependency.utils.filters;
  * under the License.
  */
 
-import java.io.File;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugins.dependency.fromConfiguration.ArtifactItem;
 import org.apache.maven.plugins.dependency.utils.DependencyUtil;
@@ -30,6 +26,12 @@ import 
org.apache.maven.shared.artifact.filter.collection.AbstractArtifactsFilte
 import 
org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
 import org.codehaus.plexus.util.StringUtils;
 
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
 /**
  * @author <a href="mailto:bri...@apache.org";>Brian Fox</a>
  */
@@ -266,7 +268,7 @@ public class DestFileFilter
     }
 
     @Override
-    public boolean isArtifactIncluded( ArtifactItem item )
+    public boolean isArtifactIncluded( ArtifactItem item ) throws 
ArtifactFilterException
     {
         Artifact artifact = item.getArtifact();
 
@@ -294,7 +296,28 @@ public class DestFileFilter
             destFile = new File( destFolder, item.getDestFileName() );
         }
 
-        return overWrite || !destFile.exists()
-            || ( overWriteIfNewer && artifact.getFile().lastModified() > 
destFile.lastModified() );
+        return overWrite || !destFile.exists() || ( overWriteIfNewer && 
getLastModified(
+                artifact.getFile() ) > getLastModified( destFile ) );
+    }
+
+    /**
+     * Using simply {@code File.getLastModified} will return sometimes a wrong 
value see JDK bug for details.
+     *
+     * https://bugs.openjdk.java.net/browse/JDK-8177809
+     *
+     * @param file {@link File}
+     * @return the last modification time in milliseconds.
+     * @throws ArtifactFilterException in case of a IO Exception.
+     */
+    private long getLastModified( File file ) throws ArtifactFilterException
+    {
+        try
+        {
+            return Files.getLastModifiedTime( file.toPath() ).toMillis();
+        }
+        catch ( IOException e )
+        {
+            throw new ArtifactFilterException( "IO Exception", e );
+        }
     }
 }
diff --git 
a/src/test/java/org/apache/maven/plugins/dependency/fromConfiguration/TestUnpackMojo.java
 
b/src/test/java/org/apache/maven/plugins/dependency/fromConfiguration/TestUnpackMojo.java
index 5a27484..c9ba0eb 100644
--- 
a/src/test/java/org/apache/maven/plugins/dependency/fromConfiguration/TestUnpackMojo.java
+++ 
b/src/test/java/org/apache/maven/plugins/dependency/fromConfiguration/TestUnpackMojo.java
@@ -19,13 +19,6 @@ package 
org.apache.maven.plugins.dependency.fromConfiguration;
  * under the License.    
  */
 
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 import org.apache.commons.lang.time.DateFormatUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.versioning.VersionRange;
@@ -39,6 +32,14 @@ import org.apache.maven.project.MavenProject;
 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
 import org.sonatype.aether.util.DefaultRepositorySystemSession;
 
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
 public class TestUnpackMojo
     extends AbstractDependencyMojoTestCase
 {
@@ -527,6 +528,12 @@ public class TestUnpackMojo
         assertUnpacked( item, true );
     }
 
+    /**
+     * The following code has been modified to prevent the
+     * JDK bug which is described in detail
+     * https://bugs.openjdk.java.net/browse/JDK-8177809
+     *
+     */
     public void testUnpackOverWriteIfNewer()
         throws Exception
     {
@@ -567,16 +574,25 @@ public class TestUnpackMojo
         displayFile( "unpackedFile", unpackedFile );
         displayFile( "artifact    ", artifact.getFile() );
         displayFile( "marker      ", marker );
+
+        long markerLastModifiedMillis = Files.getLastModifiedTime( 
marker.toPath() ).toMillis();
+        long unpackedFileLastModifiedMillis = Files.getLastModifiedTime( 
unpackedFile.toPath() ).toMillis();
+
         System.out.println( "marker.lastModified() = " + marker.lastModified() 
);
         System.out.println( "unpackedFile.lastModified() = " + 
unpackedFile.lastModified() );
-        assertTrue( "unpackedFile '" + unpackedFile + "' lastModified() == " + 
marker.lastModified()
-            + ": should be different", marker.lastModified() != 
unpackedFile.lastModified() );
+        System.out.println( "markerLastModifiedMillis = " + 
markerLastModifiedMillis );
+        System.out.println( "unpackedFileLastModifiedMillis = " + 
unpackedFileLastModifiedMillis );
+
+        assertTrue( "unpackedFile '" + unpackedFile + "' lastModified() == " + 
markerLastModifiedMillis
+                + ": should be different", markerLastModifiedMillis != 
unpackedFileLastModifiedMillis );
     }
 
-    private void displayFile( String description, File file )
+    private void displayFile( String description, File file ) throws 
IOException
     {
-        System.out.println( description + ' ' + 
DateFormatUtils.ISO_DATETIME_FORMAT.format( file.lastModified() ) + ' '
-            + file.getPath().substring( getBasedir().length() ) );
+        long toMillis = Files.getLastModifiedTime( file.toPath() ).toMillis();
+        System.out.println( description + ' ' + 
DateFormatUtils.ISO_DATETIME_FORMAT.format(
+                file.lastModified() ) + ' ' + toMillis + ' ' + 
file.getPath().substring(
+                getBasedir().length() ) );
     }
 
     public void assertUnpacked( ArtifactItem item, boolean overWrite )

Reply via email to