From 53a35e6397273cec103f53ed4f3f46f80bc9c7f0 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Sat, 3 Jun 2017 10:20:36 +0800 Subject: [PATCH] --- src/org/redkale/boot/ClassFilter.java | 8 +++++++- src/org/redkale/util/RedkaleClassLoader.java | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/org/redkale/boot/ClassFilter.java b/src/org/redkale/boot/ClassFilter.java index cc2264388..87ed88fc4 100644 --- a/src/org/redkale/boot/ClassFilter.java +++ b/src/org/redkale/boot/ClassFilter.java @@ -445,7 +445,7 @@ public final class ClassFilter { * @throws IOException 异常 */ public static void load(final File excludeFile, final String[] excludeRegs, final ClassFilter... filters) throws IOException { - URLClassLoader loader = (URLClassLoader) Thread.currentThread().getContextClassLoader(); + RedkaleClassLoader loader = (RedkaleClassLoader) Thread.currentThread().getContextClassLoader(); List urlfiles = new ArrayList<>(2); List urljares = new ArrayList<>(2); final URL exurl = excludeFile != null ? excludeFile.toURI().toURL() : null; @@ -482,6 +482,12 @@ public final class ClassFilter { if (entryname.endsWith(".class") && entryname.indexOf('$') < 0) { String classname = entryname.substring(0, entryname.length() - 6); if (classname.startsWith("javax.") || classname.startsWith("com.sun.")) continue; + //常见的jar跳过 + if (classname.startsWith("com.mysql.")) break; + if (classname.startsWith("org.mariadb.")) break; + if (classname.startsWith("oracle.jdbc.")) break; + if (classname.startsWith("org.postgresql.")) break; + if (classname.startsWith("com.microsoft.sqlserver.")) break; classes.add(classname); if (debug) debugstr.append(classname).append("\r\n"); for (final ClassFilter filter : filters) { diff --git a/src/org/redkale/util/RedkaleClassLoader.java b/src/org/redkale/util/RedkaleClassLoader.java index 6437e0b5c..87ed9750f 100644 --- a/src/org/redkale/util/RedkaleClassLoader.java +++ b/src/org/redkale/util/RedkaleClassLoader.java @@ -6,6 +6,7 @@ package org.redkale.util; import java.net.*; +import java.util.HashSet; /** * @@ -14,7 +15,22 @@ import java.net.*; public class RedkaleClassLoader extends URLClassLoader { public RedkaleClassLoader(ClassLoader parent) { - super(new URL[0], parent); + super(parentURL(parent), parent); + } + + private static URL[] parentURL(ClassLoader parent) { + ClassLoader loader = parent; + HashSet set = new HashSet<>(); + do { + String loaderName = loader.getClass().getName(); + if (loaderName.startsWith("sun.") && loaderName.contains("ExtClassLoader")) continue; + if (loader instanceof URLClassLoader) { + for (URL url : ((URLClassLoader) loader).getURLs()) { + set.add(url); + } + } + } while ((loader = loader.getParent()) != null); + return set.toArray(new URL[set.size()]); } public Class loadClass(String name, byte[] b) {