Reference jars inside a jar
You will need a custom class loader for this, have a look at One Jar.
One-JAR lets you package a Java application together with its dependency Jars into a single executable Jar file.
It has an ant task which can simplify the building of it as well.
REFERENCE (from background)
Most developers reasonably assume that putting a dependency Jar file into their own Jar file, and adding a Class-Path attribute to the META-INF/MANIFEST will do the trick:
jarname.jar
| /META-INF
| | MANIFEST.MF
| | Main-Class: com.mydomain.mypackage.Main
| | Class-Path: commons-logging.jar
| /com/mydomain/mypackage
| | Main.class
| commons-logging.jar
Unfortunately this is does not work. The Java
Launcher$AppClassLoader
does not know how to load classes from a Jar inside a Jar with this kind ofClass-Path
. Trying to usejar:file:jarname.jar!/commons-logging.jar
also leads down a dead-end. This approach will only work if you install (i.e. scatter) the supporting Jar files into the directory where the jarname.jar file is installed.
Classpath including JAR within a JAR
If you're trying to create a single jar that contains your application and its required libraries, there are two ways (that I know of) to do that. The first is One-Jar, which uses a special classloader to allow the nesting of jars. The second is UberJar, (or Shade), which explodes the included libraries and puts all the classes in the top-level jar.
I should also mention that UberJar and Shade are plugins for Maven1 and Maven2 respectively. As mentioned below, you can also use the assembly plugin (which in reality is much more powerful, but much harder to properly configure).
Referencing jars from other projects in the build path in eclipse
You are not referencing the jars in JARS-Project
from ProjectX
, you are referencing JARS-Project
from ProjectX
, which is different.
To reference the jars in JARS-Project
from ProjectX
, you have to reference each jar individually. So go to your build path for ProjectX
, then go to Libraries tab, then press "Add Jars", then find each jar you need from the JARS-Project
project and add individually.
Note, for this to work the jar files themselves must be in the JARS-Project
project. If JARS-Project
only references the jars from elsewhere in the file system this will not work.
Related Topics
Bidirectional Multi-Valued Map in Java
Why Does List<String>.Toarray() Return Object[] and Not String[]? How to Work Around This
Drawing in Jlayeredpane Over Exising JPAnels
Java Applet Game 2D Window Scrolling
"Loading Class Com.Mysql.Jdbc.Driver ... Is Deprecated" Message
Changing Swing Jtable Cell Colors
Jfreechart Series Tool Tip Above Shape Annotation
Issues with Swingworker and Jprogressbar
Code for Changing the Color of Subtasks in Gantt Chart
Struts 2:There Is No Action Mapped for Namespace [/]
Graphics Rendering in Title Bar
Why F Is Placed After Float Values
Java, Simplified Check If Int Array Contains Int
Delete Item from Array and Shrink Array
What Does an Exclamation Mark Mean in Java