public static ProgramClassLoader newProgramClassLoader(File unpackedJarDir, Iterable<String> apiResourceList) throws IOException { Predicate<String> predicate = Predicates.in(Sets.newHashSet(apiResourceList)); ClassLoader filterParent = Objects.firstNonNull(Thread.currentThread().getContextClassLoader(), ClassLoaders.class.getClassLoader()); return new ProgramClassLoader(unpackedJarDir, new FilterClassLoader(predicate, filterParent)); }
@Override protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { // Try to load it from bootstrap class loader first try { return bootstrapClassLoader.loadClass(name); } catch (ClassNotFoundException e) { if (isValidResource(classNameToResourceName(name))) { return super.loadClass(name, resolve); } throw e; } }
@Override public URL findResource(String name) { if (isValidResource(name)) { return super.findResource(name); } return null; }
@Override public Enumeration<URL> findResources(String name) throws IOException { if (isValidResource(name)) { return super.findResources(name); } return new CompoundEnumeration<URL>(new Enumeration[0]); }