diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java index e2a2a7e612..f4879363be 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java @@ -101,6 +101,7 @@ public class Repackager extends Packager { public void repackage(File destination, Libraries libraries, LaunchScript launchScript, FileTime lastModifiedTime) throws IOException { Assert.isTrue(destination != null && !destination.isDirectory(), "Invalid destination"); + getLayout(); // get layout early if (lastModifiedTime != null && getLayout() instanceof War) { throw new IllegalStateException("Reproducible repackaging is not supported with war packaging"); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/test/java/org/springframework/boot/loader/tools/RepackagerTests.java b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/test/java/org/springframework/boot/loader/tools/RepackagerTests.java index 1e632563c8..1367231dcb 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/test/java/org/springframework/boot/loader/tools/RepackagerTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/test/java/org/springframework/boot/loader/tools/RepackagerTests.java @@ -139,6 +139,15 @@ class RepackagerTests extends AbstractPackagerTests { assertThat(hasLauncherClasses(this.destination)).isTrue(); } + @Test + void layoutFactoryGetsOriginalFile() throws Exception { + this.testJarFile.addClass("a/b/C.class", ClassWithMainMethod.class); + Repackager repackager = createRepackager(this.testJarFile.getFile(), false); + repackager.setLayoutFactory(new TestLayoutFactory()); + repackager.repackage(this.destination, NO_LIBRARIES); + assertThat(hasLauncherClasses(this.destination)).isTrue(); + } + @Test void addLauncherScript() throws Exception { this.testJarFile.addClass("a/b/C.class", ClassWithMainMethod.class); @@ -266,4 +275,14 @@ class RepackagerTests extends AbstractPackagerTests { } + static class TestLayoutFactory implements LayoutFactory { + + @Override + public Layout getLayout(File source) { + assertThat(source.length()).isGreaterThan(0); + return new DefaultLayoutFactory().getLayout(source); + } + + } + }