code: public Set<Class<? extends Job>> getJobClasses(String pkgname) {
  
      Set<Class<? extends Job>> classes = new HashSet<Class<? extends Job>>();
  
      String[] packages = pkgname.split("[\\:,]");
      if (packages.length > 1) {
        for (String pkg : packages) {
          classes.addAll(getJobClasses(pkg));
        }
      } else {
        String relPath = pkgname.replace('.', '/').replace("%20", " ");
  
        // Get a File object for the package
        URL resource = getResource(relPath);
        if (resource == null) {
          throw new RuntimeException("Unexpected problem: No resource for " + relPath);
        }
        String resPath = "";
        try {
          resPath = URLDecoder.decode(resource.getPath(), "UTF-8");
        } catch (UnsupportedEncodingException e) {
          e.printStackTrace();
        }
  
        logger.info("Package: '" + pkgname + "' becomes Resource: '" + resPath + "'");
  
        if (resource.toString().startsWith("jar:")) {
          processJarfile(resPath, pkgname, classes);
        } else {
          processDirectory(resPath, pkgname, classes);
        }
      }
  
      return classes;
    }
docs: Given a package name(s), search the classpath for all classes that extend sundial.job .
  
  <p>A comma(,) or colon(:) can be used to specify multiple packages to scan for Jobs.
  
  @param pkgname
  @return