diff -r 4f4554f69892 -r a9d37af23a00 launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Fri Mar 25 11:12:16 2016 +0100 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Mon Mar 28 06:34:38 2016 +0200 @@ -37,6 +37,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Enumeration; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; @@ -649,6 +650,7 @@ Object compileJar(URL jarURL) throws IOException { List libraries = new ArrayList(); + Map osgiJars = new HashMap(); for (ClassLoader loader : loaders) { Enumeration en = loader.getResources("META-INF/MANIFEST.MF"); while (en.hasMoreElements()) { @@ -662,13 +664,26 @@ final String g = attr.getValue("Bck2BrwsrGroupId"); final String v = attr.getValue("Bck2BrwsrVersion"); final String d = attr.getValue("Bck2BrwsrDebug"); + final String n = attr.getValue("Bck2BrwsrName"); if (g != null && a != null && v != null && "true".equals(d)) { libraries.add(new String[] { - a, g, v, key + a, g, v, key, n }); } } + final Attributes main = mf.getMainAttributes(); + String symbol = main.getValue("Bundle-SymbolicName"); + String version; + if (symbol == null) { + symbol = main.getValue("OpenIDE-Module-Name"); + version = main.getValue("OpenIDE-Module-SpecificationVersion"); + } else { + version = main.getValue("Bundle-Version"); + } + if (symbol != null) { + osgiJars.put(symbol, new Object[] { e, version }); + } } } URL precompiled = null; @@ -693,6 +708,16 @@ } } } + if (precompiled == null) { + for (ClassLoader loader : loaders) { + for (String[] lib : libraries) { + Object[] urlVersion = osgiJars.get(lib[4]); + if (urlVersion != null && urlVersion[1].toString().startsWith(lib[2])) { + precompiled = loader.getResource(lib[3]); + } + } + } + } Object ret = BaseHTTPLauncher.this.compileJar(jarURL, precompiled); ignore.add(jarURL); return ret;