private void loadClassesFromDirectory( File directoryToScan, String current, List<String> classList) { logger.debug("Scan directory " + directoryToScan); for (File f : directoryToScan.listFiles()) { if (f.isDirectory()) { if (!".".equals(f.getName()) && !"..".equals(f.getName())) { loadClassesFromDirectory(f, current + "." + f.getName(), classList); } } else { if (f.getName().endsWith(".class")) { classList.add( current + "." + f.getName().substring(0, f.getName().length() - ".class".length())); } } } logger.debug("Directory scanned " + directoryToScan); }
private List<String> findScannedClasses() throws Exception { List<String> classList = new ArrayList<String>(); for (String s : scanPackageSet) { String path = s.replaceAll("\\.", "/"); logger.debug("Scan package " + s); Enumeration<URL> l = classLoader.getResources(path); while (l.hasMoreElements()) { URL url = l.nextElement(); String u = url.toExternalForm(); if (u.startsWith("file:")) { String directoryName = u.substring("file:".length()); directoryName = URLDecoder.decode(directoryName, "UTF-8"); loadClassesFromDirectory(new File(directoryName), s, classList); } else if (u.startsWith("jar:file:")) { loadClassesFromJarFile(u.substring("jar:file:".length()), s, classList); } else { throw new RuntimeException("Not managed class container " + u); } } } return classList; }