From ae2ff7849b76ec8cae8583e0485330d0b3d8361c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 17 Mar 2021 11:11:24 +0000 Subject: [PATCH] Revert "Fail fast when finalName is misconfigured" This reverts commit 263b7c20e4ad4bdc9bbd5f0e68bcd1d706d8a29c. See gh-25590 --- .../boot/loader/tools/ImagePackager.java | 19 ++++------- .../boot/loader/tools/Packager.java | 30 +++++++++++------ .../boot/loader/tools/Repackager.java | 13 ++------ .../boot/maven/BuildImageTests.java | 9 +---- .../projects/build-image-final-name/pom.xml | 33 ------------------- .../main/java/org/test/SampleApplication.java | 28 ---------------- .../boot/maven/BuildImageMojo.java | 9 +++-- 7 files changed, 34 insertions(+), 107 deletions(-) delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/ImagePackager.java b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/ImagePackager.java index 95f4dbd1f3..9553cfc23f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/ImagePackager.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/ImagePackager.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,6 @@ import org.springframework.util.Assert; * Utility class that can be used to export a fully packaged archive to an OCI image. * * @author Phillip Webb - * @author Scott Frederick * @since 2.3.0 */ public class ImagePackager extends Packager { @@ -38,18 +37,11 @@ public class ImagePackager extends Packager { * @param source the source file to package */ public ImagePackager(File source) { - Assert.notNull(source, "Source file must not be null"); - this.source = source.getAbsoluteFile(); - if (isAlreadyPackaged()) { - this.source = getBackupFile(); - } - Assert.isTrue(this.source.exists() && this.source.isFile(), - "Source '" + this.source + "' must refer to an existing file"); - Assert.state(!isAlreadyPackaged(), () -> "Repackaged archive file " + getSource() + " cannot be exported"); + super(source, null); } /** - * Create a packaged image. + * Create an packaged image. * @param libraries the contained libraries * @param exporter the exporter used to write the image * @throws IOException on IO error @@ -59,7 +51,10 @@ public class ImagePackager extends Packager { } private void packageImage(Libraries libraries, AbstractJarWriter writer) throws IOException { - try (JarFile sourceJar = new JarFile(getSource())) { + File source = isAlreadyPackaged() ? getBackupFile() : getSource(); + Assert.state(source.exists() && source.isFile(), () -> "Unable to read jar file " + source); + Assert.state(!isAlreadyPackaged(source), () -> "Repackaged jar file " + source + " cannot be exported"); + try (JarFile sourceJar = new JarFile(source)) { write(sourceJar, libraries, writer); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Packager.java b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Packager.java index e3a8f5c5c9..ee76df63f9 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Packager.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Packager.java @@ -45,7 +45,6 @@ import org.springframework.util.StringUtils; * @author Andy Wilkinson * @author Stephane Nicoll * @author Madhura Bhave - * @author Scott Frederick * @since 2.3.0 */ public abstract class Packager { @@ -70,15 +69,15 @@ public abstract class Packager { private static final String SPRING_BOOT_APPLICATION_CLASS_NAME = "org.springframework.boot.autoconfigure.SpringBootApplication"; - private final List mainClassTimeoutListeners = new ArrayList<>(); + private List mainClassTimeoutListeners = new ArrayList<>(); private String mainClass; - protected File source; + private final File source; private Layout layout; - protected LayoutFactory layoutFactory; + private LayoutFactory layoutFactory; private Layers layers; @@ -86,6 +85,19 @@ public abstract class Packager { private boolean includeRelevantJarModeJars = true; + /** + * Create a new {@link Packager} instance. + * @param source the source JAR file to package + * @param layoutFactory the layout factory to use or {@code null} + */ + protected Packager(File source, LayoutFactory layoutFactory) { + Assert.notNull(source, "Source file must not be null"); + Assert.isTrue(source.exists() && source.isFile(), + "Source must refer to an existing file, got " + source.getAbsolutePath()); + this.source = source.getAbsoluteFile(); + this.layoutFactory = layoutFactory; + } + /** * Add a listener that will be triggered to display a warning if searching for the * main class takes too long. @@ -141,18 +153,15 @@ public abstract class Packager { this.includeRelevantJarModeJars = includeRelevantJarModeJars; } - protected final boolean isAlreadyPackaged() { + protected final boolean isAlreadyPackaged() throws IOException { return isAlreadyPackaged(this.source); } - protected final boolean isAlreadyPackaged(File file) { + protected final boolean isAlreadyPackaged(File file) throws IOException { try (JarFile jarFile = new JarFile(file)) { Manifest manifest = jarFile.getManifest(); return (manifest != null && manifest.getMainAttributes().getValue(BOOT_VERSION_ATTRIBUTE) != null); } - catch (IOException ex) { - throw new IllegalStateException("Error reading archive file", ex); - } } protected final void write(JarFile sourceJar, Libraries libraries, AbstractJarWriter writer) throws IOException { @@ -276,7 +285,8 @@ public abstract class Packager { * @return the file to use to backup the original source */ public final File getBackupFile() { - return new File(this.source.getParentFile(), this.source.getName() + ".original"); + File source = getSource(); + return new File(source.getParentFile(), source.getName() + ".original"); } protected final File getSource() { 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 e0f5f772f8..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 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,7 +32,6 @@ import org.springframework.util.Assert; * @author Andy Wilkinson * @author Stephane Nicoll * @author Madhura Bhave - * @author Scott Frederick * @since 1.0.0 */ public class Repackager extends Packager { @@ -43,16 +42,8 @@ public class Repackager extends Packager { this(source, null); } - /** - * Create a new {@link Repackager} instance. - * @param source the source archive file to package - * @param layoutFactory the layout factory to use or {@code null} - */ public Repackager(File source, LayoutFactory layoutFactory) { - Assert.notNull(source, "Source file must not be null"); - Assert.isTrue(source.exists() && source.isFile(), "Source '" + source + "' must refer to an existing file"); - this.source = source.getAbsoluteFile(); - this.layoutFactory = layoutFactory; + super(source, layoutFactory); } /** diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java index 54b77c7ffb..28769b1408 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -158,13 +158,6 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { (project) -> assertThat(buildLog(project)).contains("Executable jar file required for building image")); } - @TestTemplate - void failsWhenFinalNameIsMisconfigured(MavenBuild mavenBuild) { - mavenBuild.project("build-image-final-name").goals("package") - .executeAndFail((project) -> assertThat(buildLog(project)).contains("final-name.jar.original") - .contains("must refer to an existing file")); - } - private void writeLongNameResource(File project) { StringBuilder name = new StringBuilder(); new Random().ints('a', 'z' + 1).limit(128).forEach((i) -> name.append((char) i)); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/pom.xml deleted file mode 100644 index 599371978a..0000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - build-image-final-name - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - build-image - - - final-name - - - - - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/src/main/java/org/test/SampleApplication.java deleted file mode 100644 index 27259ff01a..0000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/src/main/java/org/test/SampleApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2012-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.test; - -public class SampleApplication { - - public static void main(String[] args) throws Exception { - System.out.println("Launched"); - synchronized(args) { - args.wait(); // Prevent exit" - } - } - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageMojo.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageMojo.java index b69fe05823..e977d1e2bb 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageMojo.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -153,8 +153,7 @@ public class BuildImageMojo extends AbstractPackagerMojo { } private BuildRequest getBuildRequest(Libraries libraries) { - ImagePackager imagePackager = new ImagePackager(getJarFile()); - Function content = (owner) -> getApplicationContent(owner, libraries, imagePackager); + Function content = (owner) -> getApplicationContent(owner, libraries); Image image = (this.image != null) ? this.image : new Image(); if (image.name == null && this.imageName != null) { image.setName(this.imageName); @@ -168,8 +167,8 @@ public class BuildImageMojo extends AbstractPackagerMojo { return customize(image.getBuildRequest(this.project.getArtifact(), content)); } - private TarArchive getApplicationContent(Owner owner, Libraries libraries, ImagePackager imagePackager) { - ImagePackager packager = getConfiguredPackager(() -> imagePackager); + private TarArchive getApplicationContent(Owner owner, Libraries libraries) { + ImagePackager packager = getConfiguredPackager(() -> new ImagePackager(getJarFile())); return new PackagedTarArchive(owner, libraries, packager); }