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]

Reply via email to