summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby <robby@santoslab.org>2018-03-10 19:32:42 -0600
committerLi Haoyi <haoyi.sg@gmail.com>2018-03-10 17:32:42 -0800
commit46c516893a641a283f11a46f5c45a5cf1b4af373 (patch)
treeb33f67713da653eba49b91fb8b67b839cec70726
parent0c91649e548f4fe6620e067dfe7425e3bca0de62 (diff)
downloadmill-46c516893a641a283f11a46f5c45a5cf1b4af373.tar.gz
mill-46c516893a641a283f11a46f5c45a5cf1b4af373.tar.bz2
mill-46c516893a641a283f11a46f5c45a5cf1b4af373.zip
Changes to make {clientserver,main,scalalib,scalajslib}.test work under Java 9 (#217)
* Append "exported rt.jar" when creating URLClassLoader. * Disabled tests involving Scala 2.10 & 2.11 and nashorn. * Use java.net.URLClassLoader.
-rw-r--r--core/src/mill/util/ClassLoader.scala12
-rw-r--r--main/src/mill/modules/Jvm.scala4
-rw-r--r--main/test/src/mill/util/TestUtil.scala5
-rw-r--r--scalajslib/src/mill/scalajslib/ScalaJSBridge.scala4
-rw-r--r--scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala28
-rw-r--r--scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala4
-rw-r--r--scalalib/test/src/mill/scalalib/HelloWorldTests.scala4
-rw-r--r--scalaworker/src/mill/scalaworker/ScalaWorker.scala6
8 files changed, 42 insertions, 25 deletions
diff --git a/core/src/mill/util/ClassLoader.scala b/core/src/mill/util/ClassLoader.scala
new file mode 100644
index 00000000..7f4a9836
--- /dev/null
+++ b/core/src/mill/util/ClassLoader.scala
@@ -0,0 +1,12 @@
+package mill.util
+
+import java.net.{URL, URLClassLoader}
+
+import io.github.retronym.java9rtexport.Export
+
+object ClassLoader {
+ def create(urls: Seq[URL], parent: java.lang.ClassLoader): URLClassLoader = {
+ val rtOpt = if (ammonite.util.Util.java9OrAbove) Some(Export.export().toURI.toURL) else None
+ new URLClassLoader((urls ++ rtOpt).toArray, parent)
+ }
+}
diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala
index 153e1959..dba3552d 100644
--- a/main/src/mill/modules/Jvm.scala
+++ b/main/src/mill/modules/Jvm.scala
@@ -104,7 +104,7 @@ object Jvm {
body: ClassLoader => T): T = {
val cl = if (classLoaderOverrideSbtTesting) {
val outerClassLoader = getClass.getClassLoader
- new URLClassLoader(classPath.map(_.toIO.toURI.toURL).toArray, null){
+ new URLClassLoader(classPath.map(_.toIO.toURI.toURL).toArray, mill.util.ClassLoader.create(Seq(), null)){
override def findClass(name: String) = {
if (name.startsWith("sbt.testing.")){
outerClassLoader.loadClass(name)
@@ -114,7 +114,7 @@ object Jvm {
}
}
} else {
- new URLClassLoader(classPath.map(_.toIO.toURI.toURL).toArray, null)
+ mill.util.ClassLoader.create(classPath.map(_.toIO.toURI.toURL).toVector, null)
}
val oldCl = Thread.currentThread().getContextClassLoader
Thread.currentThread().setContextClassLoader(cl)
diff --git a/main/test/src/mill/util/TestUtil.scala b/main/test/src/mill/util/TestUtil.scala
index d06c7f6a..d0caade7 100644
--- a/main/test/src/mill/util/TestUtil.scala
+++ b/main/test/src/mill/util/TestUtil.scala
@@ -78,4 +78,9 @@ object TestUtil {
}
}
}
+ def disableInJava9OrAbove(f: => Any): Unit = {
+ if (!ammonite.util.Util.java9OrAbove) {
+ f
+ }
+ }
}
diff --git a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala
index 17bcd6c7..322a6ca4 100644
--- a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala
+++ b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala
@@ -27,8 +27,8 @@ class ScalaJSWorker {
scalaInstanceCache match {
case Some((sig, bridge)) if sig == classloaderSig => bridge
case _ =>
- val cl = new URLClassLoader(
- toolsClasspath.map(_.toIO.toURI.toURL).toArray,
+ val cl = mill.util.ClassLoader.create(
+ toolsClasspath.map(_.toIO.toURI.toURL).toVector,
getClass.getClassLoader
)
val bridge = cl
diff --git a/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala b/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala
index 2429a189..cfdcdd1f 100644
--- a/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala
+++ b/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala
@@ -102,7 +102,7 @@ object HelloJSWorldTests extends TestSuite {
'fromScratch_2124_0622 - testCompileFromScratch("2.12.4", "0.6.22")
'fromScratch_2123_0622 - testCompileFromScratch("2.12.3", "0.6.22")
- 'fromScratch_2118_0622 - testCompileFromScratch("2.11.8", "0.6.22")
+ 'fromScratch_2118_0622 - TestUtil.disableInJava9OrAbove(testCompileFromScratch("2.11.8", "0.6.22"))
'fromScratch_2124_100M2 - testCompileFromScratch("2.12.4", "1.0.0-M2")
}
@@ -119,16 +119,16 @@ object HelloJSWorldTests extends TestSuite {
}
'fullOpt - {
- 'run_2124_0622 - testRun("2.12.4", "0.6.22", FullOpt)
- 'run_2123_0622 - testRun("2.12.3", "0.6.22", FullOpt)
- 'run_2118_0622 - testRun("2.11.8", "0.6.22", FullOpt)
- 'run_2124_100M2 - testRun("2.12.4", "1.0.0-M2", FullOpt)
+ 'run_2124_0622 - TestUtil.disableInJava9OrAbove(testRun("2.12.4", "0.6.22", FullOpt))
+ 'run_2123_0622 - TestUtil.disableInJava9OrAbove(testRun("2.12.3", "0.6.22", FullOpt))
+ 'run_2118_0622 - TestUtil.disableInJava9OrAbove(testRun("2.11.8", "0.6.22", FullOpt))
+ 'run_2124_100M2 - TestUtil.disableInJava9OrAbove(testRun("2.12.4", "1.0.0-M2", FullOpt))
}
'fastOpt - {
- 'run_2124_0622 - testRun("2.12.4", "0.6.22", FastOpt)
- 'run_2123_0622 - testRun("2.12.3", "0.6.22", FastOpt)
- 'run_2118_0622 - testRun("2.11.8", "0.6.22", FastOpt)
- 'run_2124_100M2 - testRun("2.12.4", "1.0.0-M2", FastOpt)
+ 'run_2124_0622 - TestUtil.disableInJava9OrAbove(testRun("2.12.4", "0.6.22", FastOpt))
+ 'run_2123_0622 - TestUtil.disableInJava9OrAbove(testRun("2.12.3", "0.6.22", FastOpt))
+ 'run_2118_0622 - TestUtil.disableInJava9OrAbove(testRun("2.11.8", "0.6.22", FastOpt))
+ 'run_2124_100M2 - TestUtil.disableInJava9OrAbove(testRun("2.12.4", "1.0.0-M2", FastOpt))
}
'jar - {
'containsSJSIRs - {
@@ -192,12 +192,12 @@ object HelloJSWorldTests extends TestSuite {
)
}
- 'utest_2118_0622 - checkUtest("2.11.8", "0.6.22")
+ 'utest_2118_0622 - TestUtil.disableInJava9OrAbove(checkUtest("2.11.8", "0.6.22"))
'utest_2124_0622 - checkUtest("2.12.4", "0.6.22")
- 'utest_2118_100M2 - checkUtest("2.11.8", "1.0.0-M2")
+ 'utest_2118_100M2 - TestUtil.disableInJava9OrAbove(checkUtest("2.11.8", "1.0.0-M2"))
'utest_2124_100M2 - checkUtest("2.12.4", "1.0.0-M2")
- 'scalaTest_2118_0622 - checkScalaTest("2.11.8", "0.6.22")
+ 'scalaTest_2118_0622 - TestUtil.disableInJava9OrAbove(checkScalaTest("2.11.8", "0.6.22"))
'scalaTest_2124_0622 - checkScalaTest("2.12.4", "0.6.22")
// No scalatest artifact for scala.js 1.0.0-M2 published yet
// 'scalaTest_2118_100M2 - checkScalaTest("2.11.8", "1.0.0-M2")
@@ -222,9 +222,9 @@ object HelloJSWorldTests extends TestSuite {
}
'run - {
- 'run_2118_0622 - checkRun("2.11.8", "0.6.22")
+ 'run_2118_0622 - TestUtil.disableInJava9OrAbove(checkRun("2.11.8", "0.6.22"))
'run_2124_0622 - checkRun("2.12.4", "0.6.22")
- 'run_2118_100M2 - checkRun("2.11.8", "1.0.0-M2")
+ 'run_2118_100M2 - TestUtil.disableInJava9OrAbove(checkRun("2.11.8", "1.0.0-M2"))
'run_2124_100M2 - checkRun("2.12.4", "1.0.0-M2")
}
}
diff --git a/scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala b/scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala
index e2364f38..37429038 100644
--- a/scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala
+++ b/scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala
@@ -54,8 +54,8 @@ object MultiModuleTests extends TestSuite {
)
}
- 'fastOpt - checkOpt(FastOpt)
- 'fullOpt - checkOpt(FullOpt)
+ 'fastOpt - TestUtil.disableInJava9OrAbove(checkOpt(FastOpt))
+ 'fullOpt - TestUtil.disableInJava9OrAbove(checkOpt(FullOpt))
'test - {
val Right(((_, testResults), evalCount)) = evaluator(MultiModule.client.test.test())
diff --git a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala b/scalalib/test/src/mill/scalalib/HelloWorldTests.scala
index 317f9bec..61d2b724 100644
--- a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala
+++ b/scalalib/test/src/mill/scalalib/HelloWorldTests.scala
@@ -246,8 +246,8 @@ object HelloWorldTests extends TestSuite {
read(runResult) == expectedOut
)
}
- 'v210 - workspaceTest(CrossHelloWorld)(cross(_, "2.10.6", "2.10.6 rox"))
- 'v211 - workspaceTest(CrossHelloWorld)(cross(_, "2.11.11", "2.11.11 pwns"))
+ 'v210 - TestUtil.disableInJava9OrAbove(workspaceTest(CrossHelloWorld)(cross(_, "2.10.6", "2.10.6 rox")))
+ 'v211 - TestUtil.disableInJava9OrAbove(workspaceTest(CrossHelloWorld)(cross(_, "2.11.11", "2.11.11 pwns")))
'v2123 - workspaceTest(CrossHelloWorld)(cross(_, "2.12.3", "2.12.3 leet"))
'v2124 - workspaceTest(CrossHelloWorld)(cross(_, "2.12.4", "2.12.4 leet"))
}
diff --git a/scalaworker/src/mill/scalaworker/ScalaWorker.scala b/scalaworker/src/mill/scalaworker/ScalaWorker.scala
index ddf6f916..ca20ccf1 100644
--- a/scalaworker/src/mill/scalaworker/ScalaWorker.scala
+++ b/scalaworker/src/mill/scalaworker/ScalaWorker.scala
@@ -89,7 +89,7 @@ class ScalaWorker(ctx0: mill.util.Ctx,
.get
val sourceFolder = mill.modules.Util.unpackZip(sourceJar)(workingDir)
- val classloader = new URLClassLoader(compilerJars.map(_.toURI.toURL), null)
+ val classloader = mill.util.ClassLoader.create(compilerJars.map(_.toURI.toURL), null)
val scalacMain = classloader.loadClass("scala.tools.nsc.Main")
val argsArray = Array[String](
"-d", compiledDest.toString,
@@ -145,7 +145,7 @@ class ScalaWorker(ctx0: mill.util.Ctx,
val compilerClassLoader = scalaClassloaderCache match{
case Some((k, v)) if k == compilerClassloaderSig => v
case _ =>
- val classloader = new URLClassLoader(compilerJars.map(_.toURI.toURL), null)
+ val classloader = mill.util.ClassLoader.create(compilerJars.map(_.toURI.toURL), null)
scalaClassloaderCache = Some((compilerClassloaderSig, classloader))
classloader
}
@@ -155,7 +155,7 @@ class ScalaWorker(ctx0: mill.util.Ctx,
case _ =>
val scalaInstance = new ScalaInstance(
version = scalaVersion,
- loader = new URLClassLoader(pluginJars.map(_.toURI.toURL), compilerClassLoader),
+ loader = mill.util.ClassLoader.create(pluginJars.map(_.toURI.toURL), compilerClassLoader),
libraryJar = grepJar(compilerClasspath, s"scala-library-$scalaVersion.jar"),
compilerJar = grepJar(compilerClasspath, s"scala-compiler-$scalaVersion.jar"),
allJars = compilerJars ++ pluginJars,