diff options
-rwxr-xr-x | build.sc | 24 | ||||
-rw-r--r-- | main/client/src/mill/main/client/MillClientMain.java | 29 |
2 files changed, 35 insertions, 18 deletions
@@ -294,12 +294,18 @@ def launcherScript(shellJvmArgs: Seq[String], object dev extends MillModule{ def moduleDeps = Seq(scalalib, scalajslib) def forkArgs = - (scalalib.testArgs() ++ - scalajslib.testArgs() ++ - scalalib.worker.testArgs() ++ - // Workaround for Zinc/JNA bug - // https://github.com/sbt/sbt/blame/6718803ee6023ab041b045a6988fafcfae9d15b5/main/src/main/scala/sbt/Main.scala#L130 - Seq("-Djna.nosys=true", "-DMILL_VERSION=" + build.publishVersion()._2)).distinct + ( + scalalib.testArgs() ++ + scalajslib.testArgs() ++ + scalalib.worker.testArgs() ++ + // Workaround for Zinc/JNA bug + // https://github.com/sbt/sbt/blame/6718803ee6023ab041b045a6988fafcfae9d15b5/main/src/main/scala/sbt/Main.scala#L130 + Seq( + "-Djna.nosys=true", + "-DMILL_VERSION=" + build.publishVersion()._2, + "-DMILL_CLASSPATH=" + runClasspath().map(_.path.toString).mkString(",") + ) + ).distinct // Pass dev.assembly VM options via file in Window due to small max args limit def windowsVmOptions(taskName: String, batch: Path, args: Seq[String])(implicit ctx: mill.util.Ctx) = { @@ -339,11 +345,11 @@ object dev extends MillModule{ def prependShellScript = T{ val classpath = runClasspath().map(_.path.toString) - val args = forkArgs().distinct + val args = forkArgs() val (shellArgs, cmdArgs) = if (!scala.util.Properties.isWin) ( - Seq("-DMILL_CLASSPATH=" + classpath.mkString(":")) ++ args, - Seq("-DMILL_CLASSPATH=" + classpath.mkString(";")) ++ args + args, + args ) else ( Seq("""-XX:VMOptionsFile="$( dirname "$0" )"/mill.vmoptions"""), diff --git a/main/client/src/mill/main/client/MillClientMain.java b/main/client/src/mill/main/client/MillClientMain.java index 3ec4f8b0..3857caff 100644 --- a/main/client/src/mill/main/client/MillClientMain.java +++ b/main/client/src/mill/main/client/MillClientMain.java @@ -11,25 +11,36 @@ import java.util.*; public class MillClientMain { static void initServer(String lockBase, boolean setJnaNoSys) throws IOException,URISyntaxException{ - String[] selfJars = System.getProperty("MILL_CLASSPATH").split(File.pathSeparator); + String[] selfJars = System.getProperty("MILL_CLASSPATH").split(","); - ArrayList<String> l = new java.util.ArrayList<String>(); + List<String> l = new ArrayList<>(); + List<String> vmOptions = new ArrayList<>(); l.add("java"); - Properties props = System.getProperties(); - Iterator<String> keys = props.stringPropertyNames().iterator(); - while(keys.hasNext()){ - String k = keys.next(); - if (k.startsWith("MILL_")) l.add("-D" + k + "=" + props.getProperty(k)); + final Properties props = System.getProperties(); + for(final String k: props.stringPropertyNames()){ + if (k.startsWith("MILL_") && !"MILL_CLASSPATH".equals(k)) { + vmOptions.add("-D" + k + "=" + props.getProperty(k)); + } } if (setJnaNoSys) { - l.add("-Djna.nosys=true"); + vmOptions.add("-Djna.nosys=true"); + } + if(!Util.isWindows){ + l.addAll(vmOptions); + } else { + final File vmOptionsFile = new File(lockBase, "vmoptions"); + try (PrintWriter out = new PrintWriter(vmOptionsFile)) { + for(String opt: vmOptions) + out.println(opt); + } + l.add("-XX:VMOptionsFile=" + vmOptionsFile.getCanonicalPath()); } l.add("-cp"); l.add(String.join(File.pathSeparator, selfJars)); l.add("mill.main.MillServerMain"); l.add(lockBase); - new java.lang.ProcessBuilder() + new ProcessBuilder() .command(l) .redirectOutput(new java.io.File(lockBase + "/logs")) .redirectError(new java.io.File(lockBase + "/logs")) |