Provides a system property that can be used to restore use of 'jar'-protocol URLs for certain JARs, according to a regular expression. Option #3 (or even #2) of issue #130618. diff --git a/o.n.bootstrap/src/org/netbeans/JarClassLoader.java b/o.n.bootstrap/src/org/netbeans/JarClassLoader.java --- a/o.n.bootstrap/src/org/netbeans/JarClassLoader.java +++ b/o.n.bootstrap/src/org/netbeans/JarClassLoader.java @@ -76,6 +76,7 @@ import java.util.jar.Manifest; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.regex.Pattern; import java.util.zip.ZipEntry; /** @@ -346,6 +347,17 @@ } static class JarSource extends Source { + + private static final Pattern PLAIN_JAR_PROTOCOL; + static { + Pattern p = null; + String prop = System.getProperty("org.netbeans.JarClassLoader.PLAIN_JAR_PROTOCOL"); + if (prop != null) { + p = Pattern.compile(prop); + } + PLAIN_JAR_PROTOCOL = p; + } + private String resPrefix; private File file; @@ -356,7 +368,11 @@ JarSource(File file) throws IOException { super(file.toURL()); - resPrefix = ResURLStreamHandler.RES_PROTO +":" + file.toURI() + "!/"; // NOI18N; + if (PLAIN_JAR_PROTOCOL != null && PLAIN_JAR_PROTOCOL.matcher(file.getAbsolutePath()).matches()) { + resPrefix = "jar:" + file.toURI() + "!/"; // NOI18N + } else { + resPrefix = ResURLStreamHandler.RES_PROTO + ":" + file.toURI() + "!/"; // NOI18N; + } this.file = file; }