问题
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?).
回答1:
From Sun's documentation on the -jar
option to the java
command: "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 your CLASSPATH
environment variable as well as any -cp
arguments that you might provide on the command line are both going to be ignored.
So, you have the following options:
- Package everything into one jar, and then you can execute it by running
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.Initialize
Keep things in separate jars and put one or both jars in your
CLASSPATH
environment variable instead of providing them on the command line.
回答2:
Try adding "" around the classpath entry since you have a space in the directory (Program Files). The error message "Files\Java\externaljars\ParserUtilities.jar" would indicate that is the problem.
来源:https://stackoverflow.com/questions/2393426/accessing-classes-in-an-external-jar