The Byte Code Engineering Library (formerly known as
JavaClass) is intended to give users a convenient possibility
to analyze, create, and manipulate (binary) Java class files (those
ending with .class). Classes are represented by objects which contain
all the symbolic information of the given class: methods,
fields and byte code instructions, in particular.
Such objects can be read from an existing file, be transformed
by a program (e.g. a class loader at run-time) and dumped to a file
again. An even more interesting application is the creation of classes
from scratch at run-time. The Byte Code Engineering Library
(BCEL) may be also useful if you want to learn about the Java
Virtual Machine (JVM) and the format of Java .class files.
The Bouncy Castle Crypto APIs consist of a cleanroom
implementation of the JCE 1.2.1 specification, as well as a
provider for the JCE and JCA. Note: rhug contains no crypto
code, just build infrastructure for this software. You'll
have to download it yourself from the Bouncy Castle web site
before configuring and building rhug. See
The Bean Scripting Framework (BSF) is an architecture for
incorporating scripting into Java applications and applets. Scripting
commonly used to augment an application's function or to script
together a set of application components to form an application.
There are many scripting languages implemented in Java, including
Netscape's Rhino implementation of ECMAScript, Jacl and JPython. While
each of these is embeddable in Java and provides the ability to
interact with Java from the language, using a specific scripting
language binds an application to that single language.
The Java world currently does not have a well-defined scripting
architecture that allows Java applications to incorporate scripting
easily - BSF is such an architecture. The BSF architecture allows an
application to be scripted from any BSF supported language, without
any scripting language dependencies.
JAF provides a means to type data and locate components suitable for
performing various kinds of action on it. It extends the UNIX standard
mime.types and mailcap mechanisms for Java.
JavaMail provides a complete internet mail system, including MIME.
It provides a complete implementation of JavaMail 1.3, and a broad
range of providers including the only JavaMail NNTP provider.
The BeanUtils component provides easy-to-use JavaBeans interfaces to
non-bean objects through the use of reflection and introspection.
The Collections package aims to fill certain holes in Sun's
collections API. Among the features of this package are:
special-purpose implementations of Lists and Maps for fast access,
adapter classes from Java1-style containers (arrays, enumerations) to
Java2-style collections, and methods to test or create typical
set-theory properties of collections such as union, intersection and
A database connection pool library.
The Digester package lets you configure and XML->Java object
mapping module, which triggers certain actions called rules whenever a
particular pattern of nested XML elements is recognized. A rich set
of predefined rules is available for your use, or you can create your
own. This is particularly useful for reading XML based application
The Commons FileUpload package makes it easy to add robust,
high-performance, file upload capability to your servlets and web
FileUpload parses HTTP requests which conform to RFC 1867 ,
"Form-based File Upload in HTML". That is, if an HTTP request is
submitted using the POST method, and with a content type of
"multipart/form-data", then FileUpload can parse that request, and
make the results available in a manner easily used by the caller.
The Logging package is an ultra-thin bridge between different
logging libraries. Commons components may use the Logging API to
remove compile-time and run-type dependencies on any particular
logging package, and contributors may write Log implementations for
the library of their choice.
Modeler is a package designed to make using the Java Management
Extensions (JMX) much easier to use.
Pool provides an Object-pooling API, with three major aspects:
A generic object pool interface that clients and implementors can use to provide easily interchangable pooling implementations.
A toolkit for creating modular object pools.
Several general purpose pool implementations.
CUP is a system for generating LALR parsers from simple
specifications. It serves the same role as the widely used
program YACC and in fact offers most of the features of
YACC. However, CUP is written in Java, uses specifications
including embedded Java code, and produces parsers which are
implemented in Java.
Hidden within the Eclipse project is a powerful bytecode compiler. We
have extracted that compiler from the Eclipse framework code, and
provide it as a stand-alone command line compiler (ecj). When built with
gcj, it appears to be the fasted bytecode compiler available today.
The gnu.crypto package aims at providing free, versatile, high-quality,
and provably correct implementations of cryptographic primitives and tools
in the Java programming language for use by programmers and end-users.
The gnu.regexp package is a pure-Java implementation
of a traditional (non-POSIX) NFA regular expression
engine. Its syntax can emulate many popular
development tools, including awk, sed, emacs, perl
Ant is a Java-based build tool. In theory, it is kind of like Make, but with a different set of wrinkles.
With log4j it is possible to enable logging at runtime without
modifying the application binary. The log4j package is
designed so that these statements can remain in shipped code without
incurring a heavy performance cost. Logging behavior can be controlled
by editing a configuration file, without touching the application
Regexp is a 100% Pure Java Regular Expression package that was
graciously donated to the Apache Software Foundation by Jonathan
Locke. He originally wrote this software back in 1996 and it has stood
up quite well to the test of time. It includes complete Javadoc
documentation as well as a simple Applet for visual debugging and
testing suite for compatibility.
This package is intended to be an answer to a question we
commonly hear in the Java world: "Why isn't there a decent regular
Jasmin is a Java Assembler Interface. It takes ASCII
descriptions for Java classes, written in a simple assembler-like
syntax, and using the Java Virtual Machine instruction set. It
converts them into binary Java class files suitable for loading into a
JUnit is a regression testing framework for Java.
Type-4 JDBC 2 drivers for PostgreSQL 7.3.
entirely in Java. It is typically embedded into Java
applications to provide scripting to end users.
Xalan is an XSLT processor for transforming XML documents into
HTML, text, or other XML document types. It implements the W3C
Recommendations for XSL Transformations (XSLT) and the XML
Path Language (XPath). It can be used from the command line,
in an applet or a servlet, or as a module in other program.
Xerces (named after the Xerces Blue butterfly) provides
world-class XML parsing and generation. Fully-validating
parsers are available for both Java and C++, implementing the W3C XML
and DOM (Level 1 and 2) standards, as well as the de facto SAX
(version 2) standard. The parsers are highly modular and
configurable. Initial support for XML Schema (draft W3C standard) is
A library for working with catalogs defined by the OASIS Entity
Resolution Technical Committee