From 52954b3ae784a70fd92527ce0b842105b61652d9 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Fri, 1 Feb 2013 13:10:26 -0500 Subject: [PATCH] skip duplicate entries in PluginClassLoader --- main/src/main/scala/sbt/PluginManagement.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/main/src/main/scala/sbt/PluginManagement.scala b/main/src/main/scala/sbt/PluginManagement.scala index ef65c2a65..031aa03a0 100644 --- a/main/src/main/scala/sbt/PluginManagement.scala +++ b/main/src/main/scala/sbt/PluginManagement.scala @@ -4,7 +4,7 @@ package sbt import Def.Setting import PluginManagement._ - import java.net.{URL,URLClassLoader} + import java.net.{URI,URL,URLClassLoader} final case class PluginManagement(overrides: Set[ModuleID], applyOverrides: Set[ModuleID], loader: PluginClassLoader, initialLoader: ClassLoader) { @@ -33,6 +33,11 @@ object PluginManagement ModuleID(m.organization, m.name, m.revision, crossVersion = m.crossVersion) final class PluginClassLoader(p: ClassLoader) extends URLClassLoader(Array(), p) { - def add(urls: Seq[URL]): Unit = synchronized { urls foreach addURL } + private[this] val urlSet = new collection.mutable.HashSet[URI] // remember: don't use hashCode/equals on URL + def add(urls: Seq[URL]): Unit = synchronized { + for(url <- urls) + if(urlSet.add(url.toURI)) + addURL(url) + } } }