[MDEP-655] - The unpack integration test fails intermittent.
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 @@
  * 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.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:brianf@apache.org">Brian Fox</a>
  */
@@ -266,7 +268,7 @@
     }
 
     @Override
-    public boolean isArtifactIncluded( ArtifactItem item )
+    public boolean isArtifactIncluded( ArtifactItem item ) throws ArtifactFilterException
     {
         Artifact artifact = item.getArtifact();
 
@@ -294,7 +296,28 @@
             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 @@
  * 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.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 @@
         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 @@
         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 )