diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-21 21:05:37 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-21 21:33:19 +0800 |
commit | 57f4968e8c37c857e4c8d6cac80dca739186754d (patch) | |
tree | ba15196f038511169bf0062405506e08219f368e /main/src | |
parent | 5c0016ebbda6ec74db2bdde92a6afca42fe6d076 (diff) | |
download | mill-57f4968e8c37c857e4c8d6cac80dca739186754d.tar.gz mill-57f4968e8c37c857e4c8d6cac80dca739186754d.tar.bz2 mill-57f4968e8c37c857e4c8d6cac80dca739186754d.zip |
add JavaModule#runBackground, to allow a task to kick off processes to run in the background that only die when the task is re-run
Diffstat (limited to 'main/src')
-rw-r--r-- | main/src/mill/modules/Jvm.scala | 32 | ||||
-rw-r--r-- | main/src/mill/modules/Util.scala | 5 |
2 files changed, 23 insertions, 14 deletions
diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala index be683e4a..3a6dcb9f 100644 --- a/main/src/mill/modules/Jvm.scala +++ b/main/src/mill/modules/Jvm.scala @@ -26,20 +26,30 @@ object Jvm { jvmArgs: Seq[String] = Seq.empty, envArgs: Map[String, String] = Map.empty, mainArgs: Seq[String] = Seq.empty, - workingDir: Path = null): Unit = { - baseInteractiveSubprocess( + workingDir: Path = null, + background: Boolean = false): Unit = { + val args = Vector("java") ++ - jvmArgs ++ - Vector("-cp", classPath.mkString(File.pathSeparator), mainClass) ++ - mainArgs, - envArgs, - workingDir - ) + jvmArgs ++ + Vector("-cp", classPath.mkString(File.pathSeparator), mainClass) ++ + mainArgs + + if (background) baseInteractiveSubprocess0(args, envArgs, workingDir) + else baseInteractiveSubprocess(args, envArgs, workingDir) } def baseInteractiveSubprocess(commandArgs: Seq[String], envArgs: Map[String, String], workingDir: Path) = { + val process = baseInteractiveSubprocess0(commandArgs, envArgs, workingDir) + + val exitCode = process.waitFor() + if (exitCode == 0) () + else throw InteractiveShelloutException() + } + def baseInteractiveSubprocess0(commandArgs: Seq[String], + envArgs: Map[String, String], + workingDir: Path) = { val builder = new java.lang.ProcessBuilder() for ((k, v) <- envArgs){ @@ -48,7 +58,7 @@ object Jvm { } builder.directory(workingDir.toIO) - val process = if (System.in.isInstanceOf[ByteArrayInputStream]){ + if (System.in.isInstanceOf[ByteArrayInputStream]){ val process = builder .command(commandArgs:_*) @@ -71,11 +81,9 @@ object Jvm { .start() } - val exitCode = process.waitFor() - if (exitCode == 0) () - else throw InteractiveShelloutException() } + def runLocal(mainClass: String, classPath: Agg[Path], mainArgs: Seq[String] = Seq.empty) diff --git a/main/src/mill/modules/Util.scala b/main/src/mill/modules/Util.scala index da7407d0..2d71c13e 100644 --- a/main/src/mill/modules/Util.scala +++ b/main/src/mill/modules/Util.scala @@ -59,7 +59,8 @@ object Util { def millProjectModule(key: String, artifact: String, repositories: Seq[Repository], - resolveFilter: Path => Boolean = _ => true) = { + resolveFilter: Path => Boolean = _ => true, + artifactSuffix: String = "_2.12") = { val localPath = sys.props(key) if (localPath != null) { mill.eval.Result.Success( @@ -70,7 +71,7 @@ object Util { repositories, Seq( coursier.Dependency( - coursier.Module("com.lihaoyi", artifact + "_2.12"), + coursier.Module("com.lihaoyi", artifact + artifactSuffix), sys.props("MILL_VERSION") ) ), |