From 216c5c2179715f97254d1aca28b34b0aa63f5586 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 29 Jun 2017 12:42:22 +0100 Subject: [PATCH] Set executable permission on Gradle-built archives that include launch script Closes gh-9632 --- .../boot/gradle/tasks/bundling/BootZipCopyAction.java | 1 + .../tasks/bundling/AbstractBootArchiveTests.java | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java index c8bffa8557..71dd5b8e1d 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java @@ -186,6 +186,7 @@ class BootZipCopyAction implements CopyAction { if (this.launchScript.isIncluded()) { fileStream.write(new DefaultLaunchScript(this.launchScript.getScript(), this.launchScript.getProperties()).toByteArray()); + this.output.setExecutable(true); } } catch (IOException ex) { diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java b/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java index 4351843aab..8e769d1585 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java @@ -20,10 +20,12 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardOpenOption; +import java.nio.file.attribute.PosixFilePermission; import java.util.ArrayList; import java.util.Arrays; import java.util.Enumeration; import java.util.List; +import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -186,6 +188,14 @@ public abstract class AbstractBootArchiveTests { this.task.execute(); assertThat(Files.readAllBytes(this.task.getArchivePath().toPath())) .startsWith(new DefaultLaunchScript(null, null).toByteArray()); + try { + Set permissions = Files + .getPosixFilePermissions(this.task.getArchivePath().toPath()); + assertThat(permissions).contains(PosixFilePermission.OWNER_EXECUTE); + } + catch (UnsupportedOperationException ex) { + // Windows, presumably. Continue + } } @Test