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 584bce227cdd..6630634b16fb 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 @@ * * @author Phillip Webb * @author Andy Wilkinson + * @author Rostyslav Dudka */ final class JarURLConnection extends java.net.JarURLConnection { @@ -234,6 +235,21 @@ public Permission getPermission() throws IOException { return this.permission; } + @Override + public long getLastModified() { + int defaultTime = 0; + if (this.jarFile == null || this.jarEntryName.isEmpty()) { + return defaultTime; + } + try { + JarEntry entry = getJarEntry(); + return (entry == null ? defaultTime : entry.getTime()); + } + catch (IOException ex) { + return defaultTime; + } + } + 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 15c6df1a6484..ea73baf41eab 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 @@ * * @author Andy Wilkinson * @author Phillip Webb + * @author Rostyslav Dudka */ public class JarURLConnectionTests { @@ -150,6 +151,14 @@ public void getContentLengthLongReturnsLengthOfUnderlyingEntry() throws Exceptio 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('\\', '/'); }