summaryrefslogtreecommitdiff
path: root/main/src
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-07-21 21:05:37 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-07-21 21:33:19 +0800
commit57f4968e8c37c857e4c8d6cac80dca739186754d (patch)
treeba15196f038511169bf0062405506e08219f368e /main/src
parent5c0016ebbda6ec74db2bdde92a6afca42fe6d076 (diff)
downloadmill-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.scala32
-rw-r--r--main/src/mill/modules/Util.scala5
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")
)
),