Adding WARs to Java's classpath

ripper234 picture ripper234 · Jul 27, 2009 · Viewed 15.8k times · Source

I have two wars, foo.war and bar.war. foo uses classes from bar. I'm trying to start foo, and add to Java's classpath bar.war, but java throws a ClassNotFoundException.

If I rename bar.war to bar.jar and edit its directory structure to look like a jar, it works.

Java's documentation on the -CP switch does not mention war files:

 -classpath <class search path of directories and zip/jar files>
               A ; separated list of directories, JAR archives,
               and ZIP archives to search for class files.

Answer

Jon Skeet picture Jon Skeet · Jul 27, 2009

WAR files are meant to be whole web applications, not libraries. They contain libraries, but in themselves they're applications.

One web application shouldn't depend on another application. They may depend on the same libraries, but not on each other.

Basically extract out the common functionality, make it a library (as a jar file) and either include that jar file in both WAR files or add it to a common part of the classpath.