Jar Jar Links - A utility to repackage and embed Java libraries
Copyright (C) 2004-2007  Tonic Systems, Inc.

Command-line usage:

  java -jar jarjar.jar [--help]

    Prints this help message.

  java -jar jarjar.jar --rules=file [--verbose] <in-jar> <out-jar>

    Transform the <in-jar> jar file, writing a new jar file to <out-jar>.
    Any existing file named by <out-jar> will be deleted.

    The transformation is defined by a set of rules in the file specified
    by the rules argument (see below).

  java -jar jarjar.jar --find [--level=value] <cp1> [<cp2>] 

    Prints dependencies on classpath <cp2> in classpath <cp1>. If <cp2>
    is omitted, <cp1> is used for both arguments.

    The level argument can be "class" (default) or "jar". The former
    prints dependencies between individual classes, while the latter
    only prints jar->jar dependencies. A "jar" in this context is
    actually any classpath component, which can be a jar file, a zip
    file, or a parent directory (see below).

  java -jar jarjar.jar --strings <cp>

    Dumps all string literals in classpath <cp>. Line numbers will be
    included if the classes have debug information.

Classpath format:

  The classpath argument is a colon or semi-colon delimited set
  (depending on platform) of directories, jar files, or zip files. See
  the following page for more details:
  http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/classpath.html
  
  Mustang-style wildcards are also supported:
  http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6268383

Rules file format:

  The rules file is a text file, one rule per line. Leading and trailing
  whitespace is ignored. There are two types of rules:

    rule <pattern> <result>
    zap <pattern>

  The standard rule ("rule") is used to rename classes. All references
  to the renamed classes will also be updated. If a class name is
  matched by more than one rule, only the first one will apply.

  The "zap" rule causes any matched class to be removed from the resulting
  jar file. All zap rules are processed before renaming rules.

  <pattern> is a class name with optional wildcards. "**" will
  match against any valid class name substring. To match a single
  package component (by excluding "." from the match), a single "*" may
  be used instead.

  <result> is a class name which can optionally reference the
  substrings matched by the wildcards. A numbered reference is available
  for every "*" or "**" in the <pattern>, starting from left to
  right: "@1", "@2", etc. A special "@0" reference contains the entire
  matched class name.
