summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorNikolay Tatarinov <5min4eq.unity@gmail.com>2018-03-25 11:36:01 +0300
committerGitHub <noreply@github.com>2018-03-25 11:36:01 +0300
commitf45f11b88fe00ea6fecb44e7da0aadbfffd01b25 (patch)
treef2cc04c4ac4244fc336aea1ed1fd523cfac30513 /main
parentf8cea556bf2d0989c371d104f3c862c666ebdfce (diff)
downloadmill-f45f11b88fe00ea6fecb44e7da0aadbfffd01b25.tar.gz
mill-f45f11b88fe00ea6fecb44e7da0aadbfffd01b25.tar.bz2
mill-f45f11b88fe00ea6fecb44e7da0aadbfffd01b25.zip
try to fix classloading issues on runLocal and test with java 9 (#255)
* fix class loading for inprocess in java 9 * always add rt jar in case of java 9 * move all custom classloading logic into mill.util.ClassLoader * add comments explaining parent class loader changes and comment in tests pointing to original issue
Diffstat (limited to 'main')
-rw-r--r--main/src/mill/modules/Jvm.scala17
1 files changed, 7 insertions, 10 deletions
diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala
index 9c63d108..92469988 100644
--- a/main/src/mill/modules/Jvm.scala
+++ b/main/src/mill/modules/Jvm.scala
@@ -103,19 +103,16 @@ object Jvm {
classLoaderOverrideSbtTesting: Boolean,
body: ClassLoader => T)
(implicit ctx: Ctx.Home): T = {
+ val urls = classPath.map(_.toIO.toURI.toURL)
val cl = if (classLoaderOverrideSbtTesting) {
val outerClassLoader = getClass.getClassLoader
- 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)
- }else{
- super.findClass(name)
- }
- }
- }
+ mill.util.ClassLoader.create(urls.toVector, null, customFindClass = { name =>
+ if (name.startsWith("sbt.testing."))
+ Some(outerClassLoader.loadClass(name))
+ else None
+ })
} else {
- mill.util.ClassLoader.create(classPath.map(_.toIO.toURI.toURL).toVector, null)
+ mill.util.ClassLoader.create(urls.toVector, null)
}
val oldCl = Thread.currentThread().getContextClassLoader
Thread.currentThread().setContextClassLoader(cl)