optimization to use file: urls rather than jar: urls
diff --git a/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/DelegatingURLClassLoader.java b/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/DelegatingURLClassLoader.java
index 462a836..a3bf49b 100644
--- a/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/DelegatingURLClassLoader.java
+++ b/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/DelegatingURLClassLoader.java
@@ -123,7 +123,14 @@
 	}

 

 public DelegatingURLClassLoader(URL[] codePath, URLContentFilter[] codeFilters, URL[] resourcePath, URLContentFilter[] resourceFilters, ClassLoader parent) {

-	super(codePath, parent);

+

+//	Instead of constructing the loader with supplied classpath, create loader

+//	with empty path, "fix up" jar entries and then explicitly add the classpath

+//	to the newly constructed loader

+

+	super(mungeJarURLs (codePath), parent);

+	resourcePath = mungeJarURLs(resourcePath);

+

 	if (resourcePath != null && resourcePath.length > 0)

 		resourceLoader = new ResourceLoader(resourcePath);

 

@@ -145,6 +152,34 @@
 		}

 	}

 }

+

+/**

+ * strip-off jar: protocol

+ */ 

+private static URL mungeJarURL(URL url) {

+	if (url.getProtocol().equals("jar")) {

+		String file = url.getFile();

+		if (file.startsWith("file:") || file.startsWith("valoader:")) {

+			int ix = file.indexOf("!/");

+			if (ix != -1) file = file.substring(0,ix);

+			try {

+				url = new URL(file);

+			} catch (MalformedURLException e) {

+				// just use the original if we cannot create a new one

+			}

+		}

+	}

+	return url;

+}

+

+private static URL[] mungeJarURLs(URL[] urls) {

+	if (urls == null) 

+		return null;

+	for (int i = 0; i < urls.length; i++) 

+		urls[i] = mungeJarURL(urls[i]);

+	return urls;

+}

+

 /**

  * Returns the absolute path name of a native library. The VM

  * invokes this method to locate the native libraries that belong

@@ -576,6 +611,8 @@
 	}

 

 	URLContentFilter filter = (URLContentFilter) filterTable.get(lib);

+	// retry with non-jar URL if necessary

+	if (filter == null) filter = (URLContentFilter) filterTable.get(mungeJarURL(lib));

 	if (filter == null) {

 		if (DEBUG)

 			debug("Unable to find library filter for " + name + " from " + lib);