This commit is contained in:
Redkale
2017-06-03 10:20:36 +08:00
parent b5a3c39f4f
commit 53a35e6397
2 changed files with 24 additions and 2 deletions

View File

@@ -445,7 +445,7 @@ public final class ClassFilter<T> {
* @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<URL> urlfiles = new ArrayList<>(2);
List<URL> urljares = new ArrayList<>(2);
final URL exurl = excludeFile != null ? excludeFile.toURI().toURL() : null;
@@ -482,6 +482,12 @@ public final class ClassFilter<T> {
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) {

View File

@@ -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<URL> 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) {