diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java index 584bce227cd..e44123cbfe6 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java @@ -36,6 +36,7 @@ import org.springframework.boot.loader.data.RandomAccessData.ResourceAccess; * * @author Phillip Webb * @author Andy Wilkinson + * @author Rostyslav Dudka */ final class JarURLConnection extends java.net.JarURLConnection { @@ -234,6 +235,20 @@ final class JarURLConnection extends java.net.JarURLConnection { return this.permission; } + @Override + public long getLastModified() { + if (this.jarFile == null || this.jarEntryName.isEmpty()) { + return 0; + } + try { + JarEntry entry = getJarEntry(); + return (entry == null ? 0 : entry.getTime()); + } + catch (IOException ex) { + return 0; + } + } + static void setUseFastExceptions(boolean useFastExceptions) { JarURLConnection.useFastExceptions.set(useFastExceptions); } diff --git a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java index 15c6df1a648..ea73baf41ea 100644 --- a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java +++ b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java @@ -35,6 +35,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Andy Wilkinson * @author Phillip Webb + * @author Rostyslav Dudka */ public class JarURLConnectionTests { @@ -150,6 +151,14 @@ public class JarURLConnectionTests { assertThat(url.openConnection().getContentLengthLong()).isEqualTo(1); } + @Test + public void getLastModifiedReturnsLastModifiedTimeOfJarEntry() throws Exception { + URL url = new URL("jar:file:" + getAbsolutePath() + "!/1.dat"); + JarURLConnection connection = JarURLConnection.get(url, this.jarFile); + assertThat(connection.getLastModified()) + .isEqualTo(connection.getJarEntry().getTime()); + } + private String getAbsolutePath() { return this.rootJarFile.getAbsolutePath().replace('\\', '/'); }