View Javadoc
1   package top.infra.test.classloader.multi;
2   
3   import java.io.File;
4   import java.io.IOException;
5   import java.net.MalformedURLException;
6   import java.net.URL;
7   import java.net.URLClassLoader;
8   import java.util.Arrays;
9   
10  public class LibrarySetClassLoader extends URLClassLoader {
11  
12      private final ClassLoader classLoader;
13  
14      public LibrarySetClassLoader(final ClassLoader classLoader, final String[] libraries) throws IOException {
15          super(toUrls(libraries), Integer.class.getClassLoader());
16          this.classLoader = classLoader;
17      }
18  
19      public static URL[] toUrls(final String[] libraries) throws IOException {
20          return Arrays.stream(libraries).map((s) -> {
21              try {
22                  if (s.startsWith("file:")) {
23                      return new File(s.substring("file:".length())).toURI().toURL();
24                  }
25                  return new URL(s);
26              } catch (final MalformedURLException e) {
27                  throw new RuntimeException(e);
28              }
29          }).toArray(URL[]::new);
30      }
31  
32      @Override
33      public Class<?> loadClass(final String name) throws ClassNotFoundException {
34          try {
35              return super.loadClass(name);
36          } catch (final ClassNotFoundException e) {
37              return this.classLoader.loadClass(name);
38          }
39      }
40  }