summaryrefslogtreecommitdiff
path: root/core/src/mill/modules/Jvm.scala
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/mill/modules/Jvm.scala')
-rw-r--r--core/src/mill/modules/Jvm.scala37
1 files changed, 24 insertions, 13 deletions
diff --git a/core/src/mill/modules/Jvm.scala b/core/src/mill/modules/Jvm.scala
index fdd928d7..7f2ca4dd 100644
--- a/core/src/mill/modules/Jvm.scala
+++ b/core/src/mill/modules/Jvm.scala
@@ -33,17 +33,26 @@ object Jvm {
def interactiveSubprocess(mainClass: String,
classPath: Agg[Path],
- options: Seq[String] = Seq.empty): Unit = {
+ jvmArgs: Seq[String] = Seq.empty,
+ envArgs: Map[String, String] = Map.empty,
+ mainArgs: Seq[String] = Seq.empty,
+ workingDir: Path = null): Unit = {
import ammonite.ops.ImplicitWd._
- %("java", "-cp", classPath.mkString(":"), mainClass, options)
+ val commandArgs =
+ Vector("java") ++
+ jvmArgs ++
+ Vector("-cp", classPath.mkString(":"), mainClass) ++
+ mainArgs
+
+ %.copy(envArgs = envArgs)(commandArgs)(workingDir)
}
- def inprocess(mainClass: String,
- classPath: Agg[Path],
- options: Seq[String] = Seq.empty)
- (implicit ctx: Ctx): Unit = {
+ def runLocal(mainClass: String,
+ classPath: Agg[Path],
+ mainArgs: Seq[String] = Seq.empty)
+ (implicit ctx: Ctx): Unit = {
inprocess(classPath, classLoaderOverrideSbtTesting = false, cl => {
- getMainMethod(mainClass, cl).invoke(null, options.toArray)
+ getMainMethod(mainClass, cl).invoke(null, mainArgs.toArray)
})
}
@@ -95,27 +104,29 @@ object Jvm {
def subprocess(mainClass: String,
classPath: Agg[Path],
- jvmOptions: Seq[String] = Seq.empty,
- options: Seq[String] = Seq.empty,
+ jvmArgs: Seq[String] = Seq.empty,
+ envArgs: Map[String, String] = Map.empty,
+ mainArgs: Seq[String] = Seq.empty,
workingDir: Path = null)
(implicit ctx: Ctx) = {
val commandArgs =
Vector("java") ++
- jvmOptions ++
+ jvmArgs ++
Vector("-cp", classPath.mkString(":"), mainClass) ++
- options
+ mainArgs
val workingDir1 = Option(workingDir).getOrElse(ctx.dest)
mkdir(workingDir1)
- val proc =
+ val builder =
new java.lang.ProcessBuilder()
.directory(workingDir1.toIO)
.command(commandArgs:_*)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
- .start()
+ for((k, v) <- envArgs) builder.environment().put(k, v)
+ val proc = builder.start()
val stdout = proc.getInputStream
val stderr = proc.getErrorStream
val sources = Seq(