I am having problems having my Java programs see classes that are packaged in an external jar. I am running under Windows 7. I have the classes embedded in a jar called ParserUtilities.jar. I established the path with a CLASSPATH variable using the System utility and the Environment tab.
I confirmed that the CLASSPATH is set correctly. When I type echo %CLASSPATH%, I see
C:\Program Files\Java\externaljars\ParserUtilities.jar which is correct. But when I type
java -jar Parse.jar (my executable) I get the error
Exception in thread “main” java.lang.NoClassDefFoundError: com/artificialmed/Initialize
Some additional information:
- When I put the ParserUtilities.jar in the ..\lib\ext directory, everything works.
- I am running java version 1.6.0_16. Java(TM) SE Runtime Environment
- In experimenting, I typed java -cp C:\Program Files\Java\jre6\lib\ext>java -cp C:\Program Files\Java\externaljars\ParserUtilities.jar
and got this error “Could not find the main class: Files\Java\externaljars\ParserUtilities.jar” but there is no main class (its just a collection of classes I use in a bunch of programs).
I do not have a Java SDK loaded in the environment, just a java JRE (Is this the issue?).
From Sun’s documentation on the
-jaroption to thejavacommand: “When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.” I believe that means that both yourCLASSPATHenvironment variable as well as any-cparguments that you might provide on the command line are both going to be ignored.So, you have the following options:
java -jar JarWithEverything.jar.Keep things in separate jars and provide both jars as arguments on the command line, so that you type something like this:
java -cp "C:\Program Files\Java\externaljars\ParserUtilities.jar";"C:\Program Files\Java\externaljars\Parser.jar" com.artificialmed.InitializeKeep things in separate jars and put one or both jars in your
CLASSPATHenvironment variable instead of providing them on the command line.