diff options
author | Robby <robby@santoslab.org> | 2018-03-10 19:32:42 -0600 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-03-10 17:32:42 -0800 |
commit | 46c516893a641a283f11a46f5c45a5cf1b4af373 (patch) | |
tree | b33f67713da653eba49b91fb8b67b839cec70726 | |
parent | 0c91649e548f4fe6620e067dfe7425e3bca0de62 (diff) | |
download | mill-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.scala | 12 | ||||
-rw-r--r-- | main/src/mill/modules/Jvm.scala | 4 | ||||
-rw-r--r-- | main/test/src/mill/util/TestUtil.scala | 5 | ||||
-rw-r--r-- | scalajslib/src/mill/scalajslib/ScalaJSBridge.scala | 4 | ||||
-rw-r--r-- | scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala | 28 | ||||
-rw-r--r-- | scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala | 4 | ||||
-rw-r--r-- | scalalib/test/src/mill/scalalib/HelloWorldTests.scala | 4 | ||||
-rw-r--r-- | scalaworker/src/mill/scalaworker/ScalaWorker.scala | 6 |
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, |