GNU-style options for the Jar Tool

Chris Hegarty chris.hegarty at oracle.com
Tue Jan 19 16:54:01 UTC 2016


GNU-style options for Jar Tool

Prompted by the impending addition of new options for both multi-release jars
and jigsaw, it became immediately obvious that we were running out of single
characters that could be used to represent these new options. I'd like to 
propose an update to the Jar Tool CLI to accept GNU-style options ( all short
forms being compatible with the existing current options ), so that we can
evolve the CLI in a reasonable fashion going forward.

For example:
 # Create an archive called classes.jar with two class files:
 jar --create --file classes.jar Foo.class Bar.class
 # Create an archive using an existing manifest, with all the files in foo/:
 jar --create --file classes.jar --manifest mymanifest -C foo/ .

The complete output of '--help' can be seen below [*]

Short forms are the same as existing current options.

It was suggested over on jigsaw-dev that the help output could drop the 
compatibility interface. Only printing it if '--help:compatility', or similar.

http://cr.openjdk.java.net/~chegar/jartool.options/

-Chris

P.S. jigsaw and multi-release jars will add the current list of exiting
options.

[*]  ( there may be some formatting issue in email )
$ ./jdk/bin/jar --help
Usage: jar [OPTION...] [-C dir] files ...
jar creates an archive for classes and resources, and can manipulate or
restore individual classes or resources from an archive.

 Examples:
 # Create an archive called classes.jar with two class files:
 jar --create --file classes.jar Foo.class Bar.class
 # Create an archive using an existing manifest, with all the files in foo/:
 jar --create --file classes.jar --manifest mymanifest -C foo/ .


  Main operation mode:
    -c, --create               Create the archive
    -i, --generate-index=FILE  Generate index information for the specified jar
                               archives
    -t, --list                 List the table of contents for the archive
    -u, --update               Update an existing jar archive
    -x, --extract              Extract named (or all) files from the archive

  Operation modifiers valid in any mode:

    -C DIR,                    Change to the specified directory and include the
                               following file
    -f, --file=FILE            The archive file name
    -v, --verbose              Generate verbose output on standard output

   Operation modifiers valid only in create mode:
    -n, --pack200              Perform Pack200 normalization after creating a
                               new archive

   Operation modifiers valid only in create and update mode:
    -e, --main-class=CLASSNAME The application entry point for stand-alone
                               applications bundled into a modular, or executable,
                               jar archive
    -m, --manifest=FILE        Include the manifest information from the given
                               manifest file
    -M, --no-manifest          Do not create a manifest file for the entries

   Operation modifiers valid only in create, update, and generate-index mode:
    -0, --no-compress          Store only; use no ZIP compression

   Other options:
    -?, --help                 give this help list
        --version              print program version

  Mandatory or optional arguments to long options are also mandatory or optional
  for any corresponding short options.


Compatibility Interface:

Usage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
Options:
    -c  create new archive
    -t  list table of contents for archive
    -x  extract named (or all) files from archive
    -u  update existing archive
    -v  generate verbose output on standard output
    -f  specify archive file name
    -m  include manifest information from specified manifest file
    -n  perform Pack200 normalization after creating a new archive
    -e  specify application entry point for stand-alone application 
        bundled into an executable jar file
    -0  store only; use no ZIP compression
    -P  preserve leading '/' (absolute path) and ".." (parent directory) components from file names
    -M  do not create a manifest file for the entries
    -i  generate index information for the specified jar files
    -C  change to the specified directory and include the following file
If any file is a directory then it is processed recursively.
The manifest file name, the archive file name and the entry point name are
specified in the same order as the 'm', 'f' and 'e' flags.

Example 1: to archive two class files into an archive called classes.jar: 
       jar cvf classes.jar Foo.class Bar.class 
Example 2: use an existing manifest file 'mymanifest' and archive all the
           files in the foo/ directory into 'classes.jar': 
       jar cvfm classes.jar mymanifest -C foo/ .




More information about the jdk9-dev mailing list