import java.util.jar.JarFile class JarExplore { static void main(args) { def jarname = "/home/edward/tr-AGOF_CERT/lib/tr.jar"; JarFile jarFile = new JarFile(jarname); def cl = JarExplore.class.getClassLoader().getRootLoader(); cl.addURL(new URL("file:///$jarname")); /*new File("/home/edward/tr-AGOF_CERT/lib/").eachFileMatch(~/.*\.jar$/) { cl.addURL(new URL("file:///${it.absolutePath}")); }*/ new File("/home/edward/tr-data/").eachDirRecurse{ dir -> dir.eachFileMatch(~/.*\.jar$/) { cl.addURL(new URL("file:///${it.absolutePath}")); } } def nameMap = [:] def bsclass = cl.loadClass("com.TripResearch.servlet.BaseServlet"); jarFile.entries().each { def m = it.name =~ /^([\w\/]*)\.class$/ if(m.matches()) { try { def clname = m[0][1].replaceAll("/", ".") def klazz = cl.loadClass(clname) if(!klazz.isInterface() && bsclass.isAssignableFrom(klazz)) { try { def sinstance = klazz.newInstance() //println sinstance.servletInfo def t = nameMap[sinstance.servletInfo] if(t) { t.add(klazz.name) } else { t = [klazz.name] nameMap[sinstance.servletInfo] = t } } catch(InstantiationException e) { //println "[${klazz.name} : abstract]" } catch(ExceptionInInitializerError e) { println "[${klazz.name} : ExceptionInInitializerError]" } catch(Throwable e) { println "[${klazz.name} : ${e.message}]" } } }catch(Throwable e){ e.printStackTrace() System.exit(0) } } } println nameMap.size() def shortnames = nameMap.collect { it.key.length() > 11 ? it.key[0..10] : it.key } println shortnames.unique().size() } }