summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild.sc24
-rw-r--r--main/client/src/mill/main/client/MillClientMain.java29
2 files changed, 35 insertions, 18 deletions
diff --git a/build.sc b/build.sc
index ef7fdf9d..f018b8a1 100755
--- a/build.sc
+++ b/build.sc
@@ -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"))