public static Class<?>[] classesFromDirectory(File directory) {
    URL[] urls = null;
    try {
      urls = new URL[] {directory.toURI().toURL()};
    } catch (MalformedURLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    List<Class<?>> foundClasses = new ArrayList<>();

    try (FileClassLoader urlLoader =
        new FileClassLoader(urls, ClassLoader.getSystemClassLoader())) {
      for (File possibleClassFile : directory.listFiles()) {
        if (possibleClassFile.isFile()) {
          try {
            foundClasses.add(urlLoader.createClass(possibleClassFile));
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        } else {
          foundClasses.addAll(Arrays.asList(classesFromDirectory(possibleClassFile)));
        }
      }
    } catch (IOException e1) {
      e1.printStackTrace();
    }

    Class<?>[] classesA = new Class[foundClasses.size()];
    foundClasses.toArray(classesA);

    return classesA;
  }
  /** Adds a new location to the list of configured locations. */
  private void addFile(File file) {
    file = file.getAbsoluteFile();

    if (pathFiles.contains(file)) {
      return;
    }

    if (classLoader != null) {
      try {
        classLoader.addURL(file.toURI().toURL());
      } catch (MalformedURLException ex) {
        return;
      }
    }

    pathFiles.add(file);
  }