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 )