import java.io.*; import java.util.ArrayList; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class CustomClassLoader extends ClassLoader { private ArrayList> classes = new ArrayList>(); public CustomClassLoader() { super(CustomClassLoader.class.getClassLoader()); } @Override public Class findClass(String name) { for (Class cls : classes) { if (cls.getName().equals(name)) return cls; } return null; } private void loadClasses(String zipPath) { try { ZipInputStream in = new ZipInputStream(new FileInputStream(zipPath)); ZipEntry entry; while ((entry = in.getNextEntry()) != null) { if (!entry.isDirectory()) { byte[] buffer = new byte[(int) entry.getSize()]; in.read(buffer); if (!entry.getName().endsWith(".class")) continue; String name = entry.getName().replace(".class", "").replace("/", "."); Class cls = this.defineClass(name, buffer, 0, buffer.length); this.resolveClass(cls); classes.add(cls); } } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { CustomClassLoader loader = new CustomClassLoader(); loader.loadClasses("C:\\classes.zip); } }