summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-11-25 11:58:05 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-11-25 11:58:05 -0800
commite60bbce22af14088dabf0be5a8fa64c1cf9bdf82 (patch)
tree7c8a4becc57b8c77a786990adf32d0cbdc178488 /core
parent15351c7239a835c28cff140bead740a0e408b285 (diff)
downloadmill-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')
-rw-r--r--core/src/main/scala/mill/modules/Jvm.scala14
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(