diff options
author | Nikolay Tatarinov <5min4eq.unity@gmail.com> | 2018-03-25 11:36:01 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-25 11:36:01 +0300 |
commit | f45f11b88fe00ea6fecb44e7da0aadbfffd01b25 (patch) | |
tree | f2cc04c4ac4244fc336aea1ed1fd523cfac30513 /main | |
parent | f8cea556bf2d0989c371d104f3c862c666ebdfce (diff) | |
download | mill-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.scala | 17 |
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) |