diff --git a/bootstrap/src/main/java/coursier/Bootstrap.java b/bootstrap/src/main/java/coursier/Bootstrap.java index c27a3b459..90c20bb61 100644 --- a/bootstrap/src/main/java/coursier/Bootstrap.java +++ b/bootstrap/src/main/java/coursier/Bootstrap.java @@ -382,7 +382,7 @@ public class Bootstrap { parentClassLoader = new IsolatedClassLoader(contextURLs, parentClassLoader, new String[]{ isolationID }); } - ClassLoader classLoader = new BootstrapClassLoader(localURLs.toArray(new URL[localURLs.size()]), parentClassLoader); + ClassLoader classLoader = new URLClassLoader(localURLs.toArray(new URL[localURLs.size()]), parentClassLoader); Class mainClass = null; Method mainMethod = null; diff --git a/bootstrap/src/main/java/coursier/BootstrapClassLoader.java b/bootstrap/src/main/java/coursier/BootstrapClassLoader.java deleted file mode 100644 index 3de06d173..000000000 --- a/bootstrap/src/main/java/coursier/BootstrapClassLoader.java +++ /dev/null @@ -1,25 +0,0 @@ -package coursier; - -import java.net.URL; -import java.net.URLClassLoader; - -public class BootstrapClassLoader extends URLClassLoader { - - public BootstrapClassLoader( - URL[] urls, - ClassLoader parent - ) { - super(urls, parent); - } - - /** - * Can be called by reflection by launched applications, to find the "main" `ClassLoader` - * that loaded them, and possibly short-circuit it to load other things for example. - * - * The `launch` command of coursier does that. - */ - public boolean isBootstrapLoader() { - return true; - } - -} diff --git a/cli/src/main/scala-2.11/coursier/cli/Helper.scala b/cli/src/main/scala-2.11/coursier/cli/Helper.scala index 9b7c35bd5..e95195d42 100644 --- a/cli/src/main/scala-2.11/coursier/cli/Helper.scala +++ b/cli/src/main/scala-2.11/coursier/cli/Helper.scala @@ -584,22 +584,7 @@ class Helper( def contextLoader = Thread.currentThread().getContextClassLoader - // TODO Would ClassLoader.getSystemClassLoader be better here? - lazy val baseLoader: ClassLoader = - Launch.mainClassLoader(contextLoader) - .flatMap(cl => Option(cl.getParent)) - .getOrElse { - // proguarded -> no risk of conflicts, no absolute need to find a specific ClassLoader - val isProguarded = Try(contextLoader.loadClass("coursier.cli.Launch")).isFailure - if (warnBaseLoaderNotFound && !isProguarded && common.verbosityLevel >= 0) - Console.err.println( - "Warning: cannot find the main ClassLoader that launched coursier.\n" + - "Was coursier launched by its main launcher? " + - "The ClassLoader of the application that is about to be launched will be intertwined " + - "with the one of coursier, which may be a problem if their dependencies conflict." - ) - contextLoader - } + def baseLoader = ClassLoader.getSystemClassLoader lazy val (parentLoader, filteredFiles) = { diff --git a/cli/src/main/scala-2.11/coursier/cli/Launch.scala b/cli/src/main/scala-2.11/coursier/cli/Launch.scala index aa0ac1648..c8bd5f048 100644 --- a/cli/src/main/scala-2.11/coursier/cli/Launch.scala +++ b/cli/src/main/scala-2.11/coursier/cli/Launch.scala @@ -6,34 +6,8 @@ import java.net.{ URL, URLClassLoader } import caseapp._ -import scala.annotation.tailrec -import scala.language.reflectiveCalls -import scala.util.Try - object Launch { - @tailrec - def mainClassLoader(cl: ClassLoader): Option[ClassLoader] = - if (cl == null) - None - else { - val isMainLoader = try { - val cl0 = cl.asInstanceOf[Object { - def isBootstrapLoader: Boolean - }] - - cl0.isBootstrapLoader - } catch { - case e: Exception => - false - } - - if (isMainLoader) - Some(cl) - else - mainClassLoader(cl.getParent) - } - def run( loader: ClassLoader, mainClass: String, @@ -125,19 +99,8 @@ case class Launch( else options.mainClass - val extraJars = options.extraJars.filter(_.nonEmpty) - - val loader = - if (extraJars.isEmpty) - helper.loader - else - new URLClassLoader( - extraJars.map(new File(_).toURI.toURL).toArray, - helper.loader - ) - Launch.run( - loader, + helper.loader, mainClass, userArgs, options.common.verbosityLevel