summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorRobby <robby@santoslab.org>2018-03-19 10:13:03 -0500
committerLi Haoyi <haoyi.sg@gmail.com>2018-03-19 08:13:03 -0700
commite7ac7323693edbdc350ec36b578ba3e101657360 (patch)
tree34851720f0698eea29b659693ee836b9ddcb9dad /core
parent27112151475e17845fa2675e2710cba77e9a0ede (diff)
downloadmill-e7ac7323693edbdc350ec36b578ba3e101657360.tar.gz
mill-e7ac7323693edbdc350ec36b578ba3e101657360.tar.bz2
mill-e7ac7323693edbdc350ec36b578ba3e101657360.zip
Java 9 optimization by caching rt.jar (#239)
* Upgraded Ammonite to 1.0.5-7-f032887 that includes a Java 9 performance optimization for mill's client-server mode (lihaoyi/Ammonite#773). * Java 9 optimization for interactive mode by caching rt.jar. * Refactored based on @lihaoyi's comments on #239. * Removed client side rt.jar caching. * Propagatio of home path from Cli. * Propagation, propagation, propagation!
Diffstat (limited to 'core')
-rw-r--r--core/src/mill/eval/Evaluator.scala6
-rw-r--r--core/src/mill/util/ClassLoader.scala11
-rw-r--r--core/src/mill/util/Ctx.scala11
3 files changed, 22 insertions, 6 deletions
diff --git a/core/src/mill/eval/Evaluator.scala b/core/src/mill/eval/Evaluator.scala
index e61c2c4c..1e1b8b35 100644
--- a/core/src/mill/eval/Evaluator.scala
+++ b/core/src/mill/eval/Evaluator.scala
@@ -26,7 +26,8 @@ case class Labelled[T](task: NamedTask[T],
case _ => None
}
}
-case class Evaluator[T](outPath: Path,
+case class Evaluator[T](home: Path,
+ outPath: Path,
externalOutPath: Path,
rootModule: mill.define.BaseModule,
log: Logger,
@@ -265,7 +266,8 @@ case class Evaluator[T](outPath: Path,
throw new Exception("No `dest` folder available here")
}
},
- multiLogger
+ multiLogger,
+ home
)
val out = System.out
diff --git a/core/src/mill/util/ClassLoader.scala b/core/src/mill/util/ClassLoader.scala
index a1b42158..b53150c2 100644
--- a/core/src/mill/util/ClassLoader.scala
+++ b/core/src/mill/util/ClassLoader.scala
@@ -5,7 +5,9 @@ import java.net.{URL, URLClassLoader}
import io.github.retronym.java9rtexport.Export
object ClassLoader {
- def create(urls: Seq[URL], parent: java.lang.ClassLoader): URLClassLoader = {
+ def create(urls: Seq[URL],
+ parent: java.lang.ClassLoader)
+ (implicit ctx: Ctx.Home): URLClassLoader = {
val cl = new URLClassLoader(urls.toArray, parent)
if (!ammonite.util.Util.java9OrAbove) return cl
try {
@@ -13,7 +15,12 @@ object ClassLoader {
cl
} catch {
case _: ClassNotFoundException =>
- new URLClassLoader((urls ++ Some(Export.export().toURI.toURL)).toArray, parent)
+ val path = ctx.home
+ val rtFile = new java.io.File(path.toIO, s"rt-${System.getProperty("java.version")}.jar")
+ if (!rtFile.exists) {
+ java.nio.file.Files.copy(Export.export().toPath, rtFile.toPath)
+ }
+ new URLClassLoader((urls ++ Some(rtFile.toURI.toURL)).toArray, parent)
}
}
}
diff --git a/core/src/mill/util/Ctx.scala b/core/src/mill/util/Ctx.scala
index 55cc05ab..99818194 100644
--- a/core/src/mill/util/Ctx.scala
+++ b/core/src/mill/util/Ctx.scala
@@ -20,6 +20,9 @@ object Ctx{
trait Log{
def log: Logger
}
+ trait Home{
+ def home: Path
+ }
object Log{
implicit def logToCtx(l: Logger): Log = new Log { def log = l }
}
@@ -27,13 +30,17 @@ object Ctx{
def args: IndexedSeq[_]
}
+ def defaultHome = ammonite.ops.home / ".mill" / "ammonite"
+
}
class Ctx(val args: IndexedSeq[_],
dest0: () => Path,
- val log: Logger)
+ val log: Logger,
+ val home: Path)
extends Ctx.Dest
with Ctx.Log
- with Ctx.Args{
+ with Ctx.Args
+ with Ctx.Home{
def dest = dest0()
def length = args.length