Legacy Technology

These are tools and libraries that were used by DrJava in the past, but that are no longer needed. If you need to build DrJava from past sources, this information may be useful.

GJ and JSR-14

The DrJava source code used generic classes long before these features were part of standard Java. Generic Java (GJ) was an independently-developed compiler supporting generic extensions to the Java language; when these features were officially proposed for Java itself, the GJ compiler was adopted and evolved via various releases of the JSR-14 prototype compiler. Until the official Java 5 release, these compilers were used to build DrJava, and were also supported by the application itself (setting them up required pointing to the appropriate tools.jar and related standard library binaries in DrJava's preferences).


Older versions of RMI (Java 1.4 and previous) required RMI stub classes that forward method invocations to the remote process to be manually generated at compile time with rmic, the "RMI compiler." This was invoked from the Ant script, often from an rmi-compile target. This is no longer necessary: stub classes are generated on-the-fly at runtime.


Retroweaver is a SourceForge project (at http://retroweaver.sourceforge.net/) that allows Java classes to be converted to a form that is compatible with earlier Java versions. This made it possible to develop in Java 5 while deploying an application that would run on Java 1.4 JREs. Since certain language features rely on libraries only available in Java 5 JREs (such as Iterable or Integer.valueOf()), Retroweaver includes a set of runtime libraries that extend the legacy APIs with Retroweaver's version of the new classes and methods; the compile-time tool replaces all references to new classes or methods (such as java.lang.Iterable) with its substitute versions (such as net.sourceforge.retroweaver.runtime.java.lang.Iterable). Since this process can change the type signature of converted methods, it's important that the conversion happen to all classes and libraries simultaneously, as a final step before bundling an application (otherwise, for example, Java 5 classes will fail to compile against Retroweaver-processed libraries).

Later versions of Retroweaver provide extensive support for nonessential libraries; some of this support relies on a third-party backport-util-concurrent.jar library.

The Retroweaver tool was invoked via a compile-14 Ant target, which produced the directories classes/base-14, classes/test-14, and classes/lib-14, mirroring the similar class directories without the -14 extension. Libraries (like dynamicjava.jar) were built in two versions: the standard Java 5 classes and a Retroweaver-processed -14 version; the latter was mainly produced in order to verify when the library was built that it could be successfully processed.


BCEL is the Byte Code Engineering Library, available at http://jakarta.apache.org/bcel/. It was used by DrJava (including DynamicJava and Language Levels) to access and generate class files. We later migrated to ASM, which accomplishes many of the same things, but has a lighter-weight one-pass model and uses significantly less disk space. For a time, the BCEL sources were included in the Language Levels source tree, which allowed source-path-based compilation to skip over any unnecessary BCEL classes, thus reducing the disk footprint.


WinLAF is a small library providing tweaks to the Swing look-and-feel under Windows. DrJava included it for some time (although it may not have always been set up properly . . .). Its use was superceded by JGoodies.