Thanks for the tips, I wasn't using UrlSet at yet, but that looks great . I am using ASM 3 with it, I don't know about new features you could take advantage of, but it is easy to get it running. I think this method is wrong on ClassInfo:
public String getPackageName(){ return name.substring(name.lastIndexOf(".")+1, name.length()); } musachy On Wed, May 28, 2008 at 9:04 PM, David Blevins <[EMAIL PROTECTED]> wrote: > > On May 28, 2008, at 4:54 PM, Musachy Barroso wrote: > >>> It is a standalone library, used heavily by the OpenEJB and Geronimo >>> guys. >> >> oops. >> >>> >>> Personally, I favor copying the code over and jarjar'ing the asm >>> dependency. >> >> +1 > > +1 :) > > Just wanted to throw my support in for fun. > > I'd pull in the ClassFinder and UrlSet. ClassFinder.java is a standalone > class (aside from ASM), but the UrlSet is really useful for narrowing down > the scope of jars that you search which of course makes things even faster. > > If you know the exact jar(s) you want to search, you're set. But if you > simply have a classloader and want to search everything "in" it, you might > want to rip out some standard vm jars and other jars you know you do not > care about. Here's an example usage: > > // Just this line right here is good as is will diff the classpath of the > // parent classloader against the classpath of the supplied classloader and > // give you the difference. > UrlSet urlSet = new UrlSet(classLoader); > > // If you happen to need to search the system classloader, the difference > // still leaves a lot of useless garbage > urlSet = urlSet.exclude(ClassLoader.getSystemClassLoader().getParent()); > urlSet = urlSet.excludeJavaExtDirs(); > urlSet = urlSet.excludeJavaEndorsedDirs(); > urlSet = urlSet.excludeJavaHome(); > urlSet = urlSet.excludePaths(System.getProperty("sun.boot.class.path", > "")); > urlSet = urlSet.exclude(".*/JavaVM.framework/.*"); > > // If the remainder contains a lot of third party libraries required by you > // that you know don't contain annotations you're interested in, then it > can > // be good to aggressively cut those out. > urlSet = urlSet.exclude(".*/activemq-(core|ra)-[\\d.]+.jar(!/)?"); > urlSet = urlSet.exclude(".*/catalina-[\\d.]+.jar(!/)?"); > urlSet = > urlSet.exclude(".*/commons-(logging|cli|pool|lang|collections|dbcp)-[\\d.]+.jar(!/)?"); > urlSet = urlSet.exclude(".*/derby-[\\d.]+.jar(!/)?"); > urlSet = > urlSet.exclude(".*/geronimo-(connector|transaction)-[\\d.]+.jar(!/)?"); > urlSet = urlSet.exclude(".*/geronimo-[^/]+_spec-[\\d.]+.jar(!/)?"); > urlSet = > urlSet.exclude(".*/geronimo-javamail_([\\d.]+)_mail-[\\d.]+.jar(!/)?"); > urlSet = urlSet.exclude(".*/hsqldb-[\\d.]+.jar(!/)?"); > urlSet = urlSet.exclude(".*/idb-[\\d.]+.jar(!/)?"); > urlSet = urlSet.exclude(".*/jaxb-(impl|api)-[\\d.]+.jar(!/)?"); > urlSet = urlSet.exclude(".*/junit-[\\d.]+.jar(!/)?"); > urlSet = urlSet.exclude(".*/log4j-[\\d.]+.jar(!/)?"); > urlSet = > urlSet.exclude(".*/openjpa-(jdbc|kernel|lib|persistence|persistence-jdbc)(-5)?-[\\d.]+.jar(!/)?"); > > // then eventually > List<URL> urls = urlSet.getUrls(); > ClassFinder classFinder = new ClassFinder(classloader, urls); > > > As far as the stability of the API, it hasn't changed in months and months. > I do have one planned change involving the use of ASM 3 and new flag that > will speed up the scanning by allowing ASM to skip by large chunks of the > byte code. > > Let me see if I can't get that in there real quick. > > -David > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- "Hey you! Would you help me to carry the stone?" Pink Floyd --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]