mirror of https://github.com/sbt/sbt.git
Merge pull request #4640 from eatkins/meta-space
Use global classloader cache for ScalaInstance
This commit is contained in:
commit
bc21db2864
|
|
@ -40,6 +40,7 @@ private[sbt] object ClassLoaders {
|
|||
rawRuntimeDependencies =
|
||||
dependencyJars(Runtime / dependencyClasspath).value.filterNot(exclude),
|
||||
allDependencies = dependencyJars(dependencyClasspath).value.filterNot(exclude),
|
||||
globalCache = (Scope.GlobalScope / classLoaderCache).value,
|
||||
runtimeCache = (Runtime / classLoaderCache).value,
|
||||
testCache = (Test / classLoaderCache).value,
|
||||
resources = ClasspathUtilities.createClasspathResources(fullCP, si),
|
||||
|
|
@ -73,6 +74,7 @@ private[sbt] object ClassLoaders {
|
|||
)
|
||||
s.log.warn(s"$showJavaOptions will be ignored, $showFork is set to false")
|
||||
}
|
||||
val globalCache = (Scope.GlobalScope / classLoaderCache).value
|
||||
val runtimeCache = (Runtime / classLoaderCache).value
|
||||
val testCache = (Test / classLoaderCache).value
|
||||
val exclude = dependencyJars(exportedProducts).value.toSet ++ instance.allJars
|
||||
|
|
@ -86,6 +88,7 @@ private[sbt] object ClassLoaders {
|
|||
fullCP = classpath,
|
||||
rawRuntimeDependencies = runtimeDeps,
|
||||
allDependencies = allDeps,
|
||||
globalCache = globalCache,
|
||||
runtimeCache = runtimeCache,
|
||||
testCache = testCache,
|
||||
resources = ClasspathUtilities.createClasspathResources(classpath, instance),
|
||||
|
|
@ -114,6 +117,7 @@ private[sbt] object ClassLoaders {
|
|||
fullCP: Seq[File],
|
||||
rawRuntimeDependencies: Seq[File],
|
||||
allDependencies: Seq[File],
|
||||
globalCache: ClassLoaderCache,
|
||||
runtimeCache: ClassLoaderCache,
|
||||
testCache: ClassLoaderCache,
|
||||
resources: Map[String, String],
|
||||
|
|
@ -143,7 +147,8 @@ private[sbt] object ClassLoaders {
|
|||
val allTestDependencies = if (layerTestDependencies) allDependenciesSet else Set.empty[File]
|
||||
val allRuntimeDependencies = (if (layerDependencies) rawRuntimeDependencies else Nil).toSet
|
||||
|
||||
val scalaInstanceLayer = new ScalaInstanceLoader(si)
|
||||
val scalaInstanceLayer =
|
||||
globalCache.get((si.allJars.toSeq, interfaceLoader, resources, tmp))
|
||||
// layer 2
|
||||
val runtimeDependencySet = allDependenciesSet intersect allRuntimeDependencies
|
||||
val runtimeDependencies = rawRuntimeDependencies.filter(runtimeDependencySet)
|
||||
|
|
@ -187,17 +192,6 @@ private[sbt] object ClassLoaders {
|
|||
if (snapshots.isEmpty) jarLoader else cache.get((snapshots, jarLoader, resources, tmp))
|
||||
}
|
||||
|
||||
private class ScalaInstanceLoader(val instance: ScalaInstance)
|
||||
extends URLClassLoader(instance.allJars.map(_.toURI.toURL), interfaceLoader) {
|
||||
override def equals(o: Any): Boolean = o match {
|
||||
case that: ScalaInstanceLoader => this.instance.allJars.sameElements(that.instance.allJars)
|
||||
case _ => false
|
||||
}
|
||||
override def hashCode: Int = instance.hashCode
|
||||
override lazy val toString: String =
|
||||
s"ScalaInstanceLoader($interfaceLoader, jars = {${instance.allJars.mkString(", ")}})"
|
||||
}
|
||||
|
||||
// helper methods
|
||||
private def flatLoader(classpath: Seq[File], parent: ClassLoader): ClassLoader =
|
||||
new URLClassLoader(classpath.map(_.toURI.toURL).toArray, parent) {
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
package sbt.internal.inc
|
||||
|
||||
import java.io.File
|
||||
import java.net.URLClassLoader
|
||||
|
||||
import sbt.io.IO
|
||||
import sbt.io.syntax._
|
||||
|
|
@ -59,6 +60,8 @@ abstract class IvyBridgeProviderSpecification extends FlatSpec with Matchers {
|
|||
val provider = getZincProvider(bridge1, targetDir, log)
|
||||
val scalaInstance = provider.fetchScalaInstance(scalaVersion, log)
|
||||
val bridge = provider.fetchCompiledBridge(scalaInstance, log)
|
||||
scalaInstance.loader.asInstanceOf[URLClassLoader].close()
|
||||
scalaInstance.loaderLibraryOnly.asInstanceOf[URLClassLoader].close()
|
||||
val target = targetDir / s"target-bridge-$scalaVersion.jar"
|
||||
IO.copyFile(bridge, target)
|
||||
target
|
||||
|
|
|
|||
Loading…
Reference in New Issue