LibrarySetClassLoader.java
package top.infra.test.classloader.multi;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
public class LibrarySetClassLoader extends URLClassLoader {
private final ClassLoader classLoader;
public LibrarySetClassLoader(final ClassLoader classLoader, final String[] libraries) throws IOException {
super(toUrls(libraries), Integer.class.getClassLoader());
this.classLoader = classLoader;
}
public static URL[] toUrls(final String[] libraries) throws IOException {
return Arrays.stream(libraries).map((s) -> {
try {
if (s.startsWith("file:")) {
return new File(s.substring("file:".length())).toURI().toURL();
}
return new URL(s);
} catch (final MalformedURLException e) {
throw new RuntimeException(e);
}
}).toArray(URL[]::new);
}
@Override
public Class<?> loadClass(final String name) throws ClassNotFoundException {
try {
return super.loadClass(name);
} catch (final ClassNotFoundException e) {
return this.classLoader.loadClass(name);
}
}
}