diff --git a/spring-boot-tools/spring-boot-loader-tools/pom.xml b/spring-boot-tools/spring-boot-loader-tools/pom.xml index fa5721943d..5d9f9bbdf5 100644 --- a/spring-boot-tools/spring-boot-loader-tools/pom.xml +++ b/spring-boot-tools/spring-boot-loader-tools/pom.xml @@ -135,6 +135,7 @@ org.springframework.boot.loader.tools.UsesUnsafeJava org.springframework.lang.UsesJava7 + org.springframework.lang.UsesJava8 diff --git a/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java b/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java index 5059e5f805..0928254727 100644 --- a/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java +++ b/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java @@ -29,6 +29,7 @@ import java.util.jar.JarFile; import java.util.jar.Manifest; import org.springframework.boot.loader.tools.JarWriter.EntryTransformer; +import org.springframework.lang.UsesJava8; /** * Utility class that can be used to repackage an archive so that it can be executed using @@ -339,21 +340,51 @@ public class Repackager { } renamedEntry.setCompressedSize(entry.getCompressedSize()); renamedEntry.setCrc(entry.getCrc()); - if (entry.getCreationTime() != null) { - renamedEntry.setCreationTime(entry.getCreationTime()); - } + setCreationTimeIfPossible(entry, renamedEntry); if (entry.getExtra() != null) { renamedEntry.setExtra(entry.getExtra()); } - if (entry.getLastAccessTime() != null) { - renamedEntry.setLastAccessTime(entry.getLastAccessTime()); - } - if (entry.getLastModifiedTime() != null) { - renamedEntry.setLastModifiedTime(entry.getLastModifiedTime()); - } + setLastAccessTimeIfPossible(entry, renamedEntry); + setLastModifiedTimeIfPossible(entry, renamedEntry); return renamedEntry; } + @UsesJava8 + private void setCreationTimeIfPossible(JarEntry source, JarEntry target) { + try { + if (source.getCreationTime() != null) { + target.setCreationTime(source.getCreationTime()); + } + } + catch (NoSuchMethodError ex) { + // Not running on Java 8. Continue. + } + } + + @UsesJava8 + private void setLastAccessTimeIfPossible(JarEntry source, JarEntry target) { + try { + if (source.getLastAccessTime() != null) { + target.setLastAccessTime(source.getLastAccessTime()); + } + } + catch (NoSuchMethodError ex) { + // Not running on Java 8. Continue. + } + } + + @UsesJava8 + private void setLastModifiedTimeIfPossible(JarEntry source, JarEntry target) { + try { + if (source.getLastModifiedTime() != null) { + target.setLastModifiedTime(source.getLastModifiedTime()); + } + } + catch (NoSuchMethodError ex) { + // Not running on Java 8. Continue. + } + } + } }