Creating A JAR File
Creating A JAR File
The basic format of the command for creating a JAR file is:
This command will generate a compressed JAR file and place it in the current directory. The command will also
generate a default manifest file for the JAR archive.
You can add any of these additional options to the cf options of the basic command:
Option Description
Produces verbose output on stderr (in version 1.1) or stdout (in version 1.2) while the JAR file is being
v
built. The verbose output tells you the name of each file as it's added to the JAR file.
0
Indicates that you don't want the JAR file to be compressed.
(zero)
M Indicates that the default manifest file should not be produced.
Used to include manifest information from an existing manifest file. The format for using this option is:
m jar cmf existing-manifest jar-file input-file(s)
See Modifying a Manifest for more information about his option.
-C To change directories during execution of the command. Version 1.2 only. See below for an example.
In version 1.1, the JAR-file format supports only ASCII filenames. Version 1.2 adds support for UTF8-encoded
names.
An Example
Let's look at an example. The JDK demos include a simple TicTacToe applet. This demo contains a bytecode class
file, audio files, and images all housed in a directory called TicTacToe having this structure:
The audio and images subdirectories contain sound files and GIF images used by the applet.
To package this demo into a single JAR file named TicTacToe.jar, you would run this command from inside the
TicTacToe directory:
adding: TicTacToe.class
(in=3825) (out=2222) (deflated 41%)
adding: audio/ (in=0) (out=0) (stored 0%)
adding: audio/beep.au
(in=4032) (out=3572) (deflated 11%)
adding: audio/ding.au
(in=2566) (out=2055) (deflated 19%)
adding: audio/return.au
(in=6558) (out=4401) (deflated 32%)
adding: audio/yahoo1.au
(in=7834) (out=6985) (deflated 10%)
adding: audio/yahoo2.au
(in=7463) (out=4607) (deflated 38%)
adding: images/ (in=0) (out=0) (stored 0%)
adding: images/cross.gif
(in=157) (out=160) (deflated -1%)
adding: images/not.gif
(in=158) (out=161) (deflated -1%)
You can see from this output that the JAR file TicTacToe.jar is compressed. The Jar tool compresses files by
default. You can turn off the compression feature by using the 0 (zero) option, so that the command would look like:
The Jar tool will accept arguments that use the wildcard * symbol. As long as there weren't any unwanted files in the
TicTacToe directory, you could have used this alternative command to construct the JAR file:
In the above example, the files in the archive retained their relative pathnames and directory structure. The Jar tool in
version 1.2 of the Java Development Kit provides the -C option that you can use to create a JAR file in which the
relative paths of the archived files are not preserved. It's modeled after GZIP's -C option.
As an example, suppose you wanted put audio files and gif images used by the TicTacToe demo into a JAR file, and
that you wanted all the files to be on the top level, with no directory hierarchy. You could accomplish that by issuing
this command from the parent directory of the images and audio directories:
META-INF/MANIFEST.MF
cross.gif
not.gif
beep.au
ding.au
return.au
yahoo1.au
yahoo2.au
By contrast, suppose that you used a command that didn't employ the -C option:
META-INF/MANIFEST.MF
images/cross.gif
images/not.gif
audio/beep.au
audio/ding.au
audio/return.au
audio/yahoo1.au
audio/yahoo2.au