static class JavaXClassLoaderWithParents extends JavaXClassLoader { NavigableMap parentMap = syncTreeMap(); *(S progID, L files) { super(progID, files); } protected Class findClass(S name) throws ClassNotFoundException { ClassLoader parent = findParentForClass(name); if (parent != null) ret parent.loadClass(name); else ret super.findClass(name); } ClassLoader findParentForClass(S name) { ClassLoader cl = parentMap.get(name); if (cl != null) ret cl; S s = parentMap.floorKey(name); if (startsWith(name, s + "$")) ret parentMap.get(s); null; } }