diff --git a/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java index af2074394..417305c01 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java @@ -33,22 +33,26 @@ public class FileDumpHelper extends HelperBase { "JDKBuiltByMods"); // jars added in wrapper.config - URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); - URL[] urls = urlClassLoader.getURLs(); - List flist = new ArrayList(); - for (int i = 0; i < urls.length; i++) { - String p = urls[i].toString(); - if (p.startsWith("file:") && p.endsWith(".jar")) { - p = p.substring(5); - if (!(p.startsWith(_context.getBaseDir().getAbsolutePath()) || - p.startsWith(_context.getConfigDir().getAbsolutePath()))) { - flist.add(new File(p)); + ClassLoader loader = ClassLoader.getSystemClassLoader(); + if (loader instanceof URLClassLoader) { + // through Java 8, not available in Java 9 + URLClassLoader urlClassLoader = (URLClassLoader) loader; + URL[] urls = urlClassLoader.getURLs(); + List flist = new ArrayList(); + for (int i = 0; i < urls.length; i++) { + String p = urls[i].toString(); + if (p.startsWith("file:") && p.endsWith(".jar")) { + p = p.substring(5); + if (!(p.startsWith(_context.getBaseDir().getAbsolutePath()) || + p.startsWith(_context.getConfigDir().getAbsolutePath()))) { + flist.add(new File(p)); + } } } - } - Collections.sort(flist); - for (File f : flist) { - dumpFile(buf, f); + Collections.sort(flist); + for (File f : flist) { + dumpFile(buf, f); + } } // our jars @@ -123,11 +127,13 @@ public class FileDumpHelper extends HelperBase { if (s != null && s.length() > 20) { if (iv != null) buf.append("
"); - buf.append("" + - "").append(s.substring(0, 20)).append("" + + // fix and uncomment if a reliable viewmtn host appears + //buf.append(""); + buf.append("").append(s.substring(0, 20)).append("" + "
" + - "").append(s.substring(20)).append("
"); + "").append(s.substring(20)).append(""); + //buf.append(""); } buf.append(""); s = getAtt(att, "Created-By"); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java index 4caffa3c2..3420d6075 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java @@ -434,8 +434,12 @@ public class PluginStarter implements Runnable { if (f.getName().endsWith(".jar")) { try { addPath(f.toURI().toURL()); - log.error("INFO: Adding translation plugin to classpath: " + f); + log.info("INFO: Adding translation plugin to classpath: " + f); added = true; + } catch (ClassCastException e) { + log.logAlways(Log.WARN, "Java version: " + System.getProperty("java.version") + + " does not support adding classpath element: " + f + + " for plugin " + appName); } catch (RuntimeException e) { log.error("Plugin " + appName + " bad classpath element: " + f, e); } @@ -987,6 +991,8 @@ public class PluginStarter implements Runnable { /** * http://jimlife.wordpress.com/2007/12/19/java-adding-new-classpath-at-runtime/ + * + * @throws ClassCastException in Java 9 */ private static void addPath(URL u) throws Exception { URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/WebAppConfiguration.java b/apps/routerconsole/java/src/net/i2p/router/web/WebAppConfiguration.java index 440c61c03..a14f8cd9d 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/WebAppConfiguration.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/WebAppConfiguration.java @@ -110,7 +110,7 @@ public class WebAppConfiguration implements Configuration { return; StringTokenizer tok = new StringTokenizer(cp, " ,"); StringBuilder buf = new StringBuilder(); - Set systemCP = getSystemClassPath(); + Set systemCP = getSystemClassPath(i2pContext); while (tok.hasMoreTokens()) { if (buf.length() > 0) buf.append(','); @@ -159,14 +159,28 @@ public class WebAppConfiguration implements Configuration { * but keep findbugs happy. * @since 0.9 */ - private static Set getSystemClassPath() { - URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); - URL urls[] = urlClassLoader.getURLs(); + private static Set getSystemClassPath(I2PAppContext ctx) { Set rv = new HashSet(32); - for (int i = 0; i < urls.length; i++) { - try { - rv.add(urls[i].toURI()); - } catch (URISyntaxException use) {} + ClassLoader loader = ClassLoader.getSystemClassLoader(); + if (loader instanceof URLClassLoader) { + // through Java 8, not available in Java 9 + URLClassLoader urlClassLoader = (URLClassLoader) loader; + URL urls[] = urlClassLoader.getURLs(); + for (int i = 0; i < urls.length; i++) { + try { + rv.add(urls[i].toURI()); + } catch (URISyntaxException use) {} + } + } else { + // Java 9 - assume everything in lib/ is in the classpath + File libDir = new File(ctx.getBaseDir(), "lib"); + File[] files = libDir.listFiles(); + if (files != null) { + for (int i = 0; i < files.length; i++) { + if (files[i].getName().endsWith(".jar")) + rv.add(files[i].toURI()); + } + } } return rv; } diff --git a/history.txt b/history.txt index 96bea6cf7..0c3a302a7 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,15 @@ +2016-10-29 zzz + * Console: Java 9 fixes for classloader (ticket #1870) + +2016-10-28 zzz + * Build: Fix typo in jcpuid build.sh for Mac (ticket #1865) + * Crypto: + - Generate more-conforming selfsigned certs (ticket #1853) + - Remove deprecated Sha256Standalone as scheduled + * Utils: + - Fix Java version detection for Java 9 (ticket #1870) + - Add Addresses methods for multiple DNS results (ticket #1050) + 2016-10-26 zzz * Build: Mac jbigi/jcpuid improvements and docs (ticket #1865) * JRobin 1.6.0-1 diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 4e28a2c8d..c10128fe6 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 5; + public final static long BUILD = 6; /** for example "-test" */ public final static String EXTRA = "";