public void run() {
            if(args == null || args.size() == 0) {
                System.out.println("ERROR: Class name of command-line tool not specified.");
                System.exit(1);
            }

            String toolClass = args.get(0);
            Class<?> loadedClass = null;
            try {
                ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
                try {
                    loadedClass = classLoader.loadClass("achecrawler.tools."+toolClass);
                } catch(ClassNotFoundException e) {
                    // also try full class name
                    loadedClass = classLoader.loadClass(toolClass);
                }
            } catch (ClassNotFoundException e) {
                System.out.println("Unable to find CLI tool named "+toolClass);
                System.exit(1);
            }
            // Execute main() method of loaded class
            String[] params = args.subList(1, args.size()).toArray(new String[args.size()-1]);
            try {
                Method mainMethod = loadedClass.getMethod("main", String[].class);
                mainMethod.invoke(null, (Object) params);
            } catch (Exception e) {
                System.out.printf("Failed to run tool %s.\n\n", loadedClass.getName());
                e.printStackTrace(System.out);
                System.exit(1);
            }
        }
<p>
Description: This is the main entry point for working with the components of ACHE
</p>
ache/src/main/java/achecrawler/Main.java