What's New
If you have previously used JRat, you will definitely notice some differences in recent versions. During JRat's history, it has become clear what features provide the most value, and those features have been focused on.
No Injection Step
Java 5 has given us JVMPI, which provides a super easy way to hook into a JVM's class loading infrastructure. The result is that you can "install" JRat now with a single command line argument. Nice.
File Configuration
Previous versions of JRat made extensive use of system properties to control features, though an XML file could be optionally used. This model has been replaced with an jrat.xml file that is always used. If this file is not found at statup, a default file will be created and used.
No Separate Downloads
Previously, it was necessary to download BCEL to use JRat. While JRat still depends on several other open source projects ( ASM and SwingX ), these libraries are now embedded within the JRat jar. This is done with a fine open source tool called Jar Jar Links.
Focus on the TreeHandler
The most useful handler has always been the TreeHandler, but several others were implemented as well. Much more attention is now being paid to the TreeHandler, which is provides about 90% of JRat's value. You can still write your own handlers, or configure multiple handlers, but the TreeHandler has been promoted to first class status. This is also true of
Focus on Bytecode Instrumentation
Bytecode injection is the preferred way to use JRat. Support for programmatic instrumentation and possibly AOP will be phased out.
ASM is in, BCEL is out
JRat now uses ObjectWeb's ASM library to perform bytecode injection. ASM fully supports the Java 5 class file format.
HTTP Server
While still under active development, the built in HTTP server has been vastly improved upon. It is expected that JRat will begin taking greater advantage of this interface.