protected List<Class> findClasses(File directory, String packageName) throws ClassNotFoundException {
        List<Class> classes = new ArrayList<Class>();
        if (!directory.exists()) {
            return classes;
        }
        File[] files = directory.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                if(file.getName().contains(".")){
                    continue;
                }
                String findPackage = ((packageName!=null && !packageName.equals("")) ? packageName+ "." :packageName)  + file.getName();
                classes.addAll(findClasses(file, findPackage));
            } else if (file.getName().endsWith(".class")) {
                try{
                    classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));
                }catch(ClassNotFoundException ex){
                    Logger.getLogger(C.class.getName()).log(Level.SEVERE, "No load class: "+C.class.getName(), ex);
                }
            }
        }
        return classes;
    }