Jar Jar Links - A utility to repackage and embed Java libraries
Copyright 2007 Google Inc.

Command-line usage:

  java -jar jarjar.jar [help]

    Prints this help message.

  java -jar jarjar.jar strings <cp>

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

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

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

    The level argument must be "class" 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 process <rulesFile> <inJar> <outJar>

    Transform the <inJar> jar file, writing a new jar file to <outJar>.
    Any existing file named by <outJar> will be deleted.

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

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 three types of rules:

    rule <pattern> <result>
    zap <pattern>
    keep <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.

  <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.

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

  The "keep" rule marks all matched classes as "roots". If any keep
  rules are defined all classes which are not reachable from the roots
  via dependency analysis are discarded when writing the output
  jar. This is the last step in the process, after renaming and zapping.
