You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/03/29 20:05:07 UTC

[maven] 16/17: Using Files.getLastModifiedTime instead of File#lastModified to avoid a bug in JDK8 on linux.

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

rfscholte pushed a commit to branch MNG-4660
in repository https://gitbox.apache.org/repos/asf/maven.git

commit bce3d147eb1bfc5d2a2a6992116a5db739c8d9b4
Author: Martin Kanters <Ma...@infosupport.com>
AuthorDate: Sun Mar 29 17:16:34 2020 +0200

    Using Files.getLastModifiedTime instead of File#lastModified to avoid a bug in JDK8 on linux.
---
 .../src/main/java/org/apache/maven/ReactorReader.java  | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/ReactorReader.java b/maven-core/src/main/java/org/apache/maven/ReactorReader.java
index ddc74f7..13d7205 100644
--- a/maven-core/src/main/java/org/apache/maven/ReactorReader.java
+++ b/maven-core/src/main/java/org/apache/maven/ReactorReader.java
@@ -32,7 +32,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.function.Predicate;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import javax.inject.Inject;
@@ -247,16 +247,20 @@ class ReactorReader
 
         try ( Stream<Path> outputFiles = Files.walk( outputDirectory ) )
         {
-            long artifactLastModified = packagedArtifactFile.lastModified();
-            Predicate<Path> isNewerThanPackagedArtifact = path -> path.toFile().lastModified() > artifactLastModified;
-            boolean isPackagedArtifactUpToDate = outputFiles.noneMatch( isNewerThanPackagedArtifact );
+            // Not using File#lastModified() to avoid a Linux JDK8 milliseconds precision bug: JDK-8177809.
+            long artifactLastModified = Files.getLastModifiedTime( packagedArtifactFile.toPath() ).toMillis();
 
-            if ( !isPackagedArtifactUpToDate )
+            for ( Path outputFile : outputFiles.collect( Collectors.toList() ) )
             {
-                logger.warn( "Packaged artifact is not up-to-date compared to the build output directory" );
+                long outputFileLastModified = Files.getLastModifiedTime( outputFile ).toMillis();
+                if ( outputFileLastModified > artifactLastModified )
+                {
+                    logger.warn( "Packaged artifact is not up-to-date compared to the build output directory" );
+                    return false;
+                }
             }
 
-            return isPackagedArtifactUpToDate;
+            return true;
         }
         catch ( IOException e )
         {