GNU-style options for the Jar Tool
Dmitry Samersoff
dmitry.samersoff at oracle.com
Wed Jan 20 22:27:39 UTC 2016
Chris,
(slightly offtopic)
Is there any plan to introduce standard command line parsing routine?
e.g.
http://hg.openjdk.java.net/jdk9/hs-rt/hotspot/file/tip/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/SAGetopt.java
-Dmitry
On 2016-01-19 19:54, Chris Hegarty wrote:
> 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/ .
>
>
--
Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* I would love to change the world, but they won't give me the sources.
More information about the jdk9-dev
mailing list