diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/io/ZipFileTarArchive.java b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/io/ZipFileTarArchive.java index 90d543b0d61..0bab02e1f8c 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/io/ZipFileTarArchive.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/io/ZipFileTarArchive.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2021 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. @@ -80,7 +80,7 @@ public class ZipFileTarArchive implements TarArchive { + "' is not compatible with buildpacks; ensure jar file is valid and launch script is not enabled"); } catch (IOException ex) { - throw new IllegalStateException("File is not readable", ex); + throw new IllegalStateException("File '" + jarFile + "' is not readable", ex); } } @@ -99,6 +99,7 @@ public class ZipFileTarArchive implements TarArchive { tarEntry.setUserId(this.owner.getUid()); tarEntry.setGroupId(this.owner.getGid()); tarEntry.setModTime(NORMALIZED_MOD_TIME); + tarEntry.setMode(zipEntry.getUnixMode()); if (!zipEntry.isDirectory()) { tarEntry.setSize(zipEntry.getSize()); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/io/ZipFileTarArchiveTests.java b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/io/ZipFileTarArchiveTests.java index 251d545f6f9..23ae04ae540 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/io/ZipFileTarArchiveTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/io/ZipFileTarArchiveTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2021 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. @@ -36,6 +36,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException * Tests for {@link ZipFileTarArchive}. * * @author Phillip Webb + * @author Scott Frederick */ class ZipFileTarArchiveTests { @@ -75,6 +76,7 @@ class ZipFileTarArchiveTests { assertThat(fileEntry.getLongUserId()).isEqualTo(123); assertThat(fileEntry.getLongGroupId()).isEqualTo(456); assertThat(fileEntry.getSize()).isEqualTo(4); + assertThat(fileEntry.getMode()).isEqualTo(0755); assertThat(tarStream).hasContent("test"); } } @@ -85,6 +87,7 @@ class ZipFileTarArchiveTests { zip.putArchiveEntry(dirEntry); zip.closeArchiveEntry(); ZipArchiveEntry fileEntry = new ZipArchiveEntry("spring/boot"); + fileEntry.setUnixMode(0755); zip.putArchiveEntry(fileEntry); zip.write("test".getBytes(StandardCharsets.UTF_8)); zip.closeArchiveEntry();