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]