public class JarWrapper extends Object
Class-Path
manifest attribute listing a group of JAR files to
be loaded from a common codebase. It may also, depending on applicability
and selected options, contain a JAR index file, a preferred class list
and/or a Main-Class
manifest entry for the grouped JAR files.
The following items are discussed below:
The JarWrapper
tool is applicable in the following deployment
situations, which may overlap:
JarWrapper
can be used to produce a wrapper
JAR file with a combined preferred list. Preferred resources are
described in the documentation for the net.jini.loader.pref
package.
JarWrapper
can be used to produce a wrapper
JAR file with a Class-Path
attribute that uses HTTPMD
URLs. HTTPMD URLs are described in the documentation for the
net.jini.url.httpmd
package.
Configuration
) which are not
present in the JAR file or its Class-Path
,
JarWrapper
can be used to produce a wrapper JAR file
which includes the extra classes in its Class-Path
while
retaining the original Main-Class
declaration; the
wrapper JAR file can then be executed in place of the original JAR
file.
Using the Tool
JarWrapper
can be run directly from the
command line or can be invoked programmatically using the
wrap
method.
To run the tool on UNIX platforms:
To run the tool on Microsoft Windows platforms:java -jar jsk_install_dir/lib/jarwrapper.jar processing_options
java -jar jsk_install_dir\lib\jarwrapper.jar processing_options
A more specific example with options for running directly from a Unix command line might be:
where jsk_install_dir is the directory where the starter kit is installed. This command line would result in the creation of a wrapper JAR file,% java -jar install_dir/lib/jarwrapper.jar \ -httpmd=SHA-1 wrapper.jar base_dir src1.jar src2.jar
wrapper.jar
, in the current working directory, whose
contents would be based on the source JAR files src1.jar
and
src2.jar
(as well as any other JAR files referenced
transitively through their Class-Path
attributes or JAR
indexes). The paths for src1.jar
and src2.jar
, as
well as any transitively referenced JAR files, would be resolved relative to
the base_dir
directory. The Class-Path
attribute
of wrapper.jar
would use HTTPMD URLs with SHA-1 digests.
The equivalent programmatic invocation of JarWrapper
would be:
JarWrapper.wrap("wrapper.jar", "base_dir", new String[]{ "src1.jar", "src2.jar" }, "SHA-1", true, "manifest.mf" );
JarWrapper
uses the Logger
named
com.sun.jini.tool.JarWrapper
to log information at the
following logging levels:
Level | Description |
---|---|
WARNING
| Generated JAR index entries that do not end in ".jar"
|
FINE
| Names of processed source JAR files and output wrapper JAR file |
FINER
| Processing of Main-Class and Class-Path
attributes, and presence of preferred lists and JAR indexes
|
FINEST
| Processing and compilation of preferred lists and JAR indexes |
Modifier and Type | Method and Description |
---|---|
static void |
main(String[] args)
Generates a wrapper JAR file for the specified JAR files.
|
static void |
wrap(String destJar,
String baseDir,
String[] srcJars,
String httpmdAlg,
boolean index)
Invokes
wrap with the provided values and a null manifest. |
static void |
wrap(String destJar,
String baseDir,
String[] srcJars,
String httpmdAlg,
boolean index,
Manifest mf)
Generates a wrapper JAR file based on the provided values in the same
manner as described in the documentation for
main(java.lang.String[]) . |
public static void main(String[] args)
[ options ] dest-jar base-dir src-jar [ src-jar ...]The dest-jar argument specifies the name of the wrapper JAR file to generate. The base-dir argument specifies the base directory from which to locate source JAR files to wrap. The src-jar arguments are non-absolute URLs to "top-level" source JAR files relative to base-dir; they also constitute the basis of the
Class-Path
attribute included in the generated
wrapper JAR file. JAR files not present in the command line but
indirectly referenced via JAR index or Class-Path
entries
in source JAR files will themselves be used as source JAR files, and
will appear alongside the top-level source JAR files in the
Class-Path
attribute of the wrapper JAR file in depth-first
order, with JAR index references appearing before
Class-Path
references. This utility does not modify any
source JAR files.
If any of the top-level source JAR files contain preferred resources (as
indicated by a preferred list in the JAR file), then a preferred list
describing resource preferences across all source JAR files will be
included in the wrapper JAR file. The preferred list of a top-level
source JAR file is interpreted as applying to that JAR file along with
all JAR files transitively referenced by it through JAR index or
Class-Path
entries, excluding JAR files that have already
been encountered in the processing of preceding top-level JAR files. If
a given top-level source JAR file does not contain a preferred list,
then all resources contained in it and its transitively referenced JAR
files (again, excluding those previously encountered) are considered not
preferred. Preferred lists are described further in the documentation
for PreferredClassLoader
.
If any of the top-level source JAR files declare a
Main-Class
manifest entry, then the wrapper JAR file will
include a Main-Class
manifest entry whose value is that of
the first top-level source JAR file listed on the command line which
defines a Main-Class
entry.
Note that attribute values generated by this utility, such as those for the
Class-Path
and Main-Class
attributes described
above, do not take precedence over values for the same attributes contained
in a manifest file explicitly specified using the -manifest
option (described below).
Supported options for this tool include:
-verbose
com.sun.jini.tool.JarWrapper
logger to Level.FINER
.
-httpmd[=algorithm]
Class-Path
attribute of the generated wrapper JAR file. The default is to
use HTTP URLs. Digests for HTTPMD URLs are calculated using the
given algorithm, or SHA-1 if none is specified.
-noindex
-manifest=file
public static void wrap(String destJar, String baseDir, String[] srcJars, String httpmdAlg, boolean index) throws IOException
wrap
with the provided values and a null
manifest.destJar
- name of the wrapper JAR file to generatebaseDir
- base directory from which to locate source JAR
files to wrapsrcJars
- list of top-level source JAR files to processhttpmdAlg
- name of algorithm to use for generating HTTPMD URLs, or
null
if plain HTTP URLs should be usedindex
- if true
, generate a JAR index; if
false
, do not generate oneIOException
- if an I/O error occurs while processing source JAR
files or generating the wrapper JAR fileIllegalArgumentException
- if the provided values are invalidNullPointerException
- if destJar
,
baseDir
, srcJars
, or any element of
srcJars
is null
public static void wrap(String destJar, String baseDir, String[] srcJars, String httpmdAlg, boolean index, Manifest mf) throws IOException
main(java.lang.String[])
. The only
difference between this method and main
is that it receives
its values as explicit arguments instead of in a command line, and
indicates failure by throwing an exception.destJar
- name of the wrapper JAR file to generatebaseDir
- base directory from which to locate source JAR
files to wrapsrcJars
- list of top-level source JAR files to processhttpmdAlg
- name of algorithm to use for generating HTTPMD URLs, or
null
if plain HTTP URLs should be usedindex
- if true
, generate a JAR index; if
false
, do not generate onemf
- manifest containing values to include in the manifest file
of the generated wrapper JAR fileIOException
- if an I/O error occurs while processing source JAR
files or generating the wrapper JAR fileIllegalArgumentException
- if the provided values are invalidNullPointerException
- if destJar
,
baseDir
, srcJars
, or any element of
srcJars
is null
Copyright © GigaSpaces.