diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2017-11-25 11:58:05 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2017-11-25 11:58:05 -0800 |
commit | e60bbce22af14088dabf0be5a8fa64c1cf9bdf82 (patch) | |
tree | 7c8a4becc57b8c77a786990adf32d0cbdc178488 /core/src | |
parent | 15351c7239a835c28cff140bead740a0e408b285 (diff) | |
download | mill-e60bbce22af14088dabf0be5a8fa64c1cf9bdf82.tar.gz mill-e60bbce22af14088dabf0be5a8fa64c1cf9bdf82.tar.bz2 mill-e60bbce22af14088dabf0be5a8fa64c1cf9bdf82.zip |
Swap over to using `java.nio` APIs to make self-executable jars, instead of shelling out to `chmod`
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/main/scala/mill/modules/Jvm.scala | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/core/src/main/scala/mill/modules/Jvm.scala b/core/src/main/scala/mill/modules/Jvm.scala index bccdfece..d2833a33 100644 --- a/core/src/main/scala/mill/modules/Jvm.scala +++ b/core/src/main/scala/mill/modules/Jvm.scala @@ -1,6 +1,7 @@ package mill.modules import java.io.FileOutputStream +import java.nio.file.attribute.PosixFilePermission import java.util.jar.{JarEntry, JarFile, JarOutputStream} import ammonite.ops._ @@ -66,7 +67,7 @@ object Jvm { def createAssembly(outputPath: Path, inputPaths: Seq[Path], mainClass: Option[String] = None, - prependShellScript: String = "\n"): Option[Path] = { + prependShellScript: String = ""): Option[Path] = { rm(outputPath) if(inputPaths.isEmpty) None @@ -75,11 +76,14 @@ object Jvm { val output = new FileOutputStream(outputPath.toIO) - // Prepend shell script - output.write((prependShellScript + "\n").getBytes) + // Prepend shell script and make it executable if (prependShellScript.nonEmpty) { - import ammonite.ops.ImplicitWd._ - %%("chmod", "+x", outputPath) + output.write((prependShellScript + "\n").getBytes) + val perms = java.nio.file.Files.getPosixFilePermissions(outputPath.toNIO) + perms.add(PosixFilePermission.GROUP_EXECUTE) + perms.add(PosixFilePermission.OWNER_EXECUTE) + perms.add(PosixFilePermission.OTHERS_EXECUTE) + java.nio.file.Files.setPosixFilePermissions(outputPath.toNIO, perms) } val jar = new JarOutputStream( |