diff --git a/main/src/main/java/sbt/internal/ScalaLibraryClassLoader.java b/main/src/main/java/sbt/internal/ScalaLibraryClassLoader.java new file mode 100644 index 000000000..7d9d4f679 --- /dev/null +++ b/main/src/main/java/sbt/internal/ScalaLibraryClassLoader.java @@ -0,0 +1,34 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt.internal; + +import java.net.URL; +import java.net.URLClassLoader; + +final class ScalaLibraryClassLoader extends URLClassLoader { + static { + ClassLoader.registerAsParallelCapable(); + } + + private final URL[] jars; + + ScalaLibraryClassLoader(final URL[] jars, final ClassLoader parent) { + super(jars, parent); + this.jars = jars; + } + + @Override + public String toString() { + final StringBuilder builder = new StringBuilder(); + for (int i = 0; i < jars.length; ++ i) { + builder.append(jars[i].toString()); + if (i < jars.length - 2) builder.append(", "); + } + return "ScalaLibraryClassLoader(" + builder + " parent = " + getParent() + ")"; + } +} diff --git a/main/src/main/scala/sbt/internal/ClassLoaders.scala b/main/src/main/scala/sbt/internal/ClassLoaders.scala index f4f57275c..00ec668f4 100644 --- a/main/src/main/scala/sbt/internal/ClassLoaders.scala +++ b/main/src/main/scala/sbt/internal/ClassLoaders.scala @@ -133,7 +133,13 @@ private[sbt] object ClassLoaders { case _: AllLibraryJars => true case _ => false } - val scalaLibraryLayer = layer(si.libraryJars, interfaceLoader, cache, resources, tmp) + val scalaLibraryLayer = { + cache.apply( + si.libraryJars.map(j => j -> IO.getModifiedTimeOrZero(j)).toList, + interfaceLoader, + () => new ScalaLibraryClassLoader(si.libraryJars.map(_.toURI.toURL), interfaceLoader) + ) + } val cpFiles = fullCP.map(_._1) val scalaReflectJar = allDependencies.collectFirst {