wood burning stoves
The moose likes Ant, Maven and Other Build Tools and the fly likes Including a jar within a jar Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Java Interview Guide this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Engineering » Ant, Maven and Other Build Tools
Bookmark "Including a jar within a jar" Watch "Including a jar within a jar" New topic

Including a jar within a jar

Russell Wurth

Joined: Jul 12, 2004
Posts: 20
I am trying to package a class file with 2 jar files that are in my classpath.

Working directory (source/class file) : c:\eclipse\workspace\MyProject

Within my working directory, I am able to compile and run Test.java, creating Test.class. Both files are in my working directory.

Using Ant, I want a single jar that will include 'ar.jar' and 'Test.class' to be run on another environment. I would like to leave 'ar.jar' in the directory that it is currently in.

Here is my build.xml

The problem is that when I run 'java -jar MyJarFile.jar', I get a NoClassDefFoundError since it is not finding 'ar.jar'. The 'ar.jar' file is packaged in MyJarFile.jar, but I cannot figure out the correct Class-Path to reference 'ar.jar'.

Any advice?
Edward Kenworthy
Ranch Hand

Joined: Oct 05, 2003
Posts: 66
You can't do what you're trying to do. You could uncompress the jars you want to include and then re-jar them into the one jar (bad idea by the way: what happens when a new version of those jars becomes available?).

Another option is to simply ship your dependent jars in a subdirectory of your application (eg lib/) and then point your application (easiest would be to set the class-path in your Manifest file). That's what I'd do.

jerry conosm

Joined: Sep 09, 2003
Posts: 10
You should specify each jar files you used in the manifest file. For example, if you have 2 jar files a, b, you should have

Class-Path: a.jar b.jar

entry in the manifest file. Take note that they are separated by space.

Try replacing your class path entries in your script with this:

<attribute name="Class-Path" value= "java/include/.jar">
jerry conosm

Joined: Sep 09, 2003
Posts: 10
oooops! what I mean from above is

<attribute name="Class-Path" value= "java/include/ar.jar">
Ilja Preuss

Joined: Jul 11, 2001
Posts: 14112
What you are trying to do isn't supported by standard java, as far as I know. You can use http://one-jar.sourceforge.net/ to do so, though.

The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
I agree. Here's the link: http://aspose.com/file-tools
subject: Including a jar within a jar
jQuery in Action, 3rd edition