mirror of https://github.com/sbt/sbt.git
Add system property for closing classloaders
I realized that some builds may crash if we automatically close the classloaders. While I do think that is a good thing in general that we are closing the loaders by default, we shuold have an option for supressing this behavior. I made all of the custom classloaders that we define for test and run check this property before calling the super.close method.
This commit is contained in:
parent
a6bc7b1c76
commit
a38d2669e1
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
package sbt.internal;
|
package sbt.internal;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
|
|
||||||
|
|
@ -29,4 +30,9 @@ final class FlatLoader extends URLClassLoader {
|
||||||
}
|
}
|
||||||
return "FlatLoader(\n parent = " + getParent() + "\n jars = " + jars.toString() + ")";
|
return "FlatLoader(\n parent = " + getParent() + "\n jars = " + jars.toString() + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
if (SysProp.closeClassLoaders()) super.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
package sbt.internal;
|
package sbt.internal;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
|
|
||||||
|
|
@ -31,4 +32,9 @@ final class ScalaLibraryClassLoader extends URLClassLoader {
|
||||||
}
|
}
|
||||||
return "ScalaLibraryClassLoader(" + builder + " parent = " + getParent() + ")";
|
return "ScalaLibraryClassLoader(" + builder + " parent = " + getParent() + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
if (SysProp.closeClassLoaders()) super.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
package sbt.internal;
|
package sbt.internal;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
|
|
||||||
|
|
@ -26,4 +27,9 @@ final class ScalaReflectClassLoader extends URLClassLoader {
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "ScalaReflectClassLoader(" + jar + " parent = " + getParent() + ")";
|
return "ScalaReflectClassLoader(" + jar + " parent = " + getParent() + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
if (SysProp.closeClassLoaders()) super.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ private[internal] class LayeredClassLoaderImpl(
|
||||||
) extends URLClassLoader(classpath.map(_.toURI.toURL).toArray, parent)
|
) extends URLClassLoader(classpath.map(_.toURI.toURL).toArray, parent)
|
||||||
with NativeLoader {
|
with NativeLoader {
|
||||||
setTempDir(tempDir)
|
setTempDir(tempDir)
|
||||||
|
override def close(): Unit = if (SysProp.closeClassLoaders) super.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -146,6 +147,7 @@ private[internal] final class ReverseLookupClassLoaderHolder(
|
||||||
}
|
}
|
||||||
override def loadClass(name: String, resolve: Boolean): Class[_] =
|
override def loadClass(name: String, resolve: Boolean): Class[_] =
|
||||||
loadClass(name, resolve, reverseLookup = true)
|
loadClass(name, resolve, reverseLookup = true)
|
||||||
|
override def close(): Unit = if (SysProp.closeClassLoaders) super.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -193,7 +195,7 @@ private[internal] final class ReverseLookupClassLoaderHolder(
|
||||||
}
|
}
|
||||||
override def close(): Unit = {
|
override def close(): Unit = {
|
||||||
checkin(parent)
|
checkin(parent)
|
||||||
super.close()
|
if (SysProp.closeClassLoaders) super.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,8 @@ object SysProp {
|
||||||
*/
|
*/
|
||||||
lazy val color: Boolean = ConsoleAppender.formatEnabledInEnv
|
lazy val color: Boolean = ConsoleAppender.formatEnabledInEnv
|
||||||
|
|
||||||
|
def closeClassLoaders: Boolean = getOrTrue("sbt.classloader.close")
|
||||||
|
|
||||||
def supershell: Boolean = color && getOrTrue("sbt.supershell")
|
def supershell: Boolean = color && getOrTrue("sbt.supershell")
|
||||||
|
|
||||||
def supershellSleep: Long = long("sbt.supershell.sleep", 100L)
|
def supershellSleep: Long = long("sbt.supershell.sleep", 100L)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue