|
3 | 3 | import java.io.File; |
4 | 4 | import java.io.IOException; |
5 | 5 | import java.nio.charset.StandardCharsets; |
| 6 | +import java.nio.file.Files; |
| 7 | +import java.nio.file.Path; |
| 8 | +import java.nio.file.attribute.PosixFileAttributeView; |
| 9 | +import java.nio.file.attribute.PosixFilePermission; |
6 | 10 | import java.util.ArrayList; |
7 | 11 | import java.util.Collections; |
| 12 | +import java.util.HashSet; |
8 | 13 | import java.util.List; |
9 | 14 | import java.util.stream.Collectors; |
10 | 15 | import javax.inject.Inject; |
@@ -190,10 +195,30 @@ private void writeLaunchScriptForUnix(List<String> javaCommand) throws IOExcepti |
190 | 195 | "(cd " + escapeShellArg(getWorkingDirectory().get()) + "; exec " |
191 | 196 | + javaCommand.stream().map(this::escapeShellArg).collect(Collectors.joining(" ")) + ")"); |
192 | 197 |
|
| 198 | + Path destination = getLaunchScript().get().getAsFile().toPath(); |
193 | 199 | FileUtils.writeStringSafe( |
194 | | - getLaunchScript().get().getAsFile().toPath(), |
| 200 | + destination, |
195 | 201 | String.join("\n", lines), |
196 | 202 | StandardCharsets.UTF_8); |
| 203 | + |
| 204 | + makeExecutable(destination); |
| 205 | + } |
| 206 | + |
| 207 | + private static void makeExecutable(Path destination) throws IOException { |
| 208 | + var permissionView = Files.getFileAttributeView(destination, PosixFileAttributeView.class); |
| 209 | + if (permissionView != null) { |
| 210 | + var perm = new HashSet<>(permissionView.readAttributes().permissions()); |
| 211 | + if (perm.contains(PosixFilePermission.OWNER_READ)) { |
| 212 | + perm.add(PosixFilePermission.OWNER_EXECUTE); |
| 213 | + } |
| 214 | + if (perm.contains(PosixFilePermission.GROUP_READ)) { |
| 215 | + perm.add(PosixFilePermission.GROUP_EXECUTE); |
| 216 | + } |
| 217 | + if (perm.contains(PosixFilePermission.OTHERS_READ)) { |
| 218 | + perm.add(PosixFilePermission.OTHERS_EXECUTE); |
| 219 | + } |
| 220 | + permissionView.setPermissions(perm); |
| 221 | + } |
197 | 222 | } |
198 | 223 |
|
199 | 224 | private String escapeShellArg(String text) { |
|
0 commit comments