This commit is contained in:
@@ -445,7 +445,7 @@ public final class ClassFilter<T> {
|
|||||||
* @throws IOException 异常
|
* @throws IOException 异常
|
||||||
*/
|
*/
|
||||||
public static void load(final File excludeFile, final String[] excludeRegs, final ClassFilter... filters) 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> urlfiles = new ArrayList<>(2);
|
||||||
List<URL> urljares = new ArrayList<>(2);
|
List<URL> urljares = new ArrayList<>(2);
|
||||||
final URL exurl = excludeFile != null ? excludeFile.toURI().toURL() : null;
|
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) {
|
if (entryname.endsWith(".class") && entryname.indexOf('$') < 0) {
|
||||||
String classname = entryname.substring(0, entryname.length() - 6);
|
String classname = entryname.substring(0, entryname.length() - 6);
|
||||||
if (classname.startsWith("javax.") || classname.startsWith("com.sun.")) continue;
|
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);
|
classes.add(classname);
|
||||||
if (debug) debugstr.append(classname).append("\r\n");
|
if (debug) debugstr.append(classname).append("\r\n");
|
||||||
for (final ClassFilter filter : filters) {
|
for (final ClassFilter filter : filters) {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.redkale.util;
|
package org.redkale.util;
|
||||||
|
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -14,7 +15,22 @@ import java.net.*;
|
|||||||
public class RedkaleClassLoader extends URLClassLoader {
|
public class RedkaleClassLoader extends URLClassLoader {
|
||||||
|
|
||||||
public RedkaleClassLoader(ClassLoader parent) {
|
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) {
|
public Class<?> loadClass(String name, byte[] b) {
|
||||||
|
|||||||
Reference in New Issue
Block a user