An open source tool for tracking java dependencies. It builds jar files that automatically contain all the
classes used directly or indirectly by the classes you explicitly include. You need this because jar.exe is not clever enough to do this on its own. It runs only as an ant
task. It is a complex tool controlled with an XML (extensible Markup Language) script. It will also build an extended manifest describing all
the elements. Of course it has no way of knowing about dynamically loaded classes or resources. The latest
version is 1.0.2.
Last revised: 2003-03-06 Verified: 2010-02-10 to fix exception message regression
To use genjar:
- Extract the jar from the archive using WinZip.
- Copy genjar.jar and genjar.properties to
J:\Program Files (x86)\apache-ant-1.8.2\lib. This is a
one-time step. If genjar.jar is not included in your distributable, you will have to build it from source.
- Compose your <genjar XML script and or incorporate it into an ant build.xml in the project directory with the class files where you want the jar built.
- CD (Change Directory) to that project directory.
- Then run your script with:
ant jar
Don’t use the genjar destdir option. It does not produce a simple list of
dependencies to feed to jar.exe but rather a copy of the entire directory tree of
classes that would go inside the jar.
Genjar error messages are misleading. It will complain about the main class when the real problem is some
totally different class.
When genjar says Unable to resolve: null, it means it could not find some class file it needs
to include in the jar, or a file it wanted was in use by another program. Try a reboot.
Ahem. It is considered polite when a program complains about being unable to find something to divulge what it is.
Advantages
- It is very quick.
- It comes with source code.
- It solves the problem of jar building, saving you untold time manually building them.
Disadvantages
- There has not been an update since 2003.
- There are a large number of bugs reported on the SourceForge website. The author appears to have totally ignored them.
- The error messages give you no clue as to what the real problem is.
Real Life Build Script
This build script builds Biorhythms, a signed Applet. You make
genjar known to the script with: <taskdef resource="genjar.properties" /> Oddly there is no
genjar.properties file anywhere. This is sufficient to look in GenJar.jar for
Here is how you would include a whole directory full of *.png resource images in your
jar:
Advanced GenJar
You can use the <library command to unpack and include some other library jar
inside your jar. Unfortunately, the <classfilter command has no effect on just
what is included with the <library command. You have to set up the jar to be
included on the classpath, then use the <classfilter. You can use the <class command to include just the stuff from a library needed to support a given class. You can
use the <classpath command if GenJar seems to be having trouble finding some
auxiliary library.
In this example we persuade GenJar to include just the classes used by the TrueZip library jar and bundle them
in