From 68e5a107ccd841aec9366fdac2a3f00eead5e98c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 17 Mar 2021 11:17:54 +0000 Subject: [PATCH] Revert "Merge branch '2.4.x'" This reverts commit 5488b8cb465b6aa45a1a807f7754ca32132b8ed1, reversing changes made to dee0df5c53dba81fca08bc64479fc9e54434a9ac. See gh-25701 --- .../boot/loader/tools/ImagePackager.java | 19 ++++------- .../boot/loader/tools/Packager.java | 30 +++++++++++------ .../boot/loader/tools/Repackager.java | 13 ++------ .../boot/maven/BuildImageTests.java | 7 ---- .../projects/build-image-final-name/pom.xml | 33 ------------------- .../main/java/org/test/SampleApplication.java | 28 ---------------- .../boot/maven/BuildImageMojo.java | 7 ++-- 7 files changed, 32 insertions(+), 105 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 f5790aa17d..5fb17b0e57 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 { @@ -278,7 +287,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 fef2433ad3..b37c5b003e 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. @@ -31,7 +31,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 { @@ -42,16 +41,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 8900b44c92..89c40b06f9 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 @@ -223,13 +223,6 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { .contains("'urn:cnb:builder:example/does-not-exist:0.0.1' not found in builder")); } - @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 3fedcd4416..c23ce8ef02 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 @@ -186,8 +186,7 @@ public class BuildImageMojo extends AbstractPackagerMojo { } private BuildRequest getBuildRequest(Libraries libraries) throws MojoExecutionException { - ImagePackager imagePackager = new ImagePackager(getArchiveFile()); - 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); @@ -218,8 +217,8 @@ public class BuildImageMojo extends AbstractPackagerMojo { || this.docker.getPublishRegistry().isEmpty(); } - 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(getArchiveFile())); return new PackagedTarArchive(owner, libraries, packager); }