Working on Jar and Zip code using the NetBeans IDE

This note is specific to working on jar and zip; much more information about
working with this project and others is in ../README.

This project allows developers to work on the Jar and Zip in java.util.jar and
java.util.zip, as well as the jar tool itself in sun.tools.jar.  The NetBeans
project supports editing, building, testing, and debugging of this code.  This
is a make-based project, and involves compilation of native code.  Some of
this native code is provided by the JDK community, but the base zip library is
from http://www.zlib.net.

Please note: The most recent zlib is version 1.2.3.  We are providing zlib
version 1.1.3, modified to include security fixes that have been added since
that release.

Source code layout

The jar tool depends on the jar library, which in turn depends on the zip
library.  This in turn depends on some native code, which in turn depends on
the zlib library:

sun.tools.jar depends on
  java.util.jar, which depends on
    java.util.zip, which depends on
      src/share/native/java/util/zip, which depends on
        src/share/native/java/util/zip/zlib-1.1.3.

The project is set up to invoke make on the zip code first.  This make target
compile the native zip code, as well as the Java sources in java.util.zip.
Subsequent invocations of make build java.util.jar, and then sun.tools.jar.

Insofar as NetBeans use is concerned with Java code, most things you are used
to.  You can build the project.  There are several regression tests included,
run either as a group via Test Project or individually via Run File.
Debugging is also supported, try Debug File.  Since the jar tool needs command
line parameters in order to do anything interesting, it is not hooked up to
Run Project in NetBeans.
