private static List<Class<?>> getClassesInDirectory( File directory, String packageName, ClassLoader classLoader) throws UnsupportedEncodingException { List<Class<?>> classes = new ArrayList<Class<?>>(); // Capture all the .class files in this directory // Get the list of the files contained in the package String[] files = directory.list(); for (String currentFile : files) { // we are only interested in .class files if (currentFile.endsWith(".class")) { // removes the .class extension // CHECKSTYLE:OFF try { classes.add( Class.forName( packageName + '.' + currentFile.substring(0, currentFile.length() - 6))); } catch (Throwable e) { // do nothing. this class hasn't been found by the loader, and we don't care. } // CHECKSTYLE:ON } else { // It's another package String subPackageName = packageName + '.' + currentFile; // Ask for all resources for the path URL resource = classLoader.getResource(subPackageName.replace('.', '/')); File subDirectory = new File(URLDecoder.decode(resource.getPath(), "UTF-8")); List<Class<?>> classesForSubPackage = getClassesInDirectory(subDirectory, subPackageName, classLoader); classes.addAll(classesForSubPackage); } } return classes; }