views:

6305

answers:

4

Hi!

I'm trying to call a class (main method) from command line (Windows) with Java.
The class imports other classes (other jars).

I always get "class not found exception" from a class that my main program imports.

Here's what I tried:

  • Add a CLASSPATH env. var with the path where the referenced lib resides (not working)

  • I tried with all these different parameters when calling "java -jar myjar.jar" from command line : "-classpath lib/", "-classpath ./lib/", "-classpath lib", "-cp lib/*", "-cp lib/\*", "-classpath lib/referenced-class.jar", "-classpath ./lib/referenced-class.jar" (lib is where the referenced jar resides)

  • I tried packaging all the referenced jar inside my jar where my main class resides...

  • And with all that, I also tried to specify the classes inside the Manifest file with: Class-path referenced-jar.jar and I also tried Class-path lib/referenced-jar.jar

Nothing worked. Seriously, why is this so complicated? :(

+8  A: 

If you're running a jar file with java -jar, the -classpath argument is ignored. You need to set the classpath in the manifest file of your jar, like so:

Class-Path: jar1-name jar2-name directory-name/jar3-name

See the Java tutorials: Adding Classes to the JAR File's Classpath.

Edit: I see you already tried setting the class path in the manifest, but are you sure you used the correct syntax? If you skip the ':' after "Class-Path" like you showed, it would not work.

Michael Myers
Yeah I tried that too.. didn't work for me :(
Did you see my edit?
Michael Myers
yes, I tried with the ":" also... I don't know why using the Manifest to specify those didn't worked at all. I asked collegues and rechecked everything with them.
Most curious. I've done it this way for years and never had a problem. Did you capitalize Class-Path properly? I don't know if it would make a difference...
Michael Myers
I feel that this is best answer. Making a Manifest file just right manually is often a difficult task. I usually unpackage the jar and have Ant make another one. It is possible that his path and resource names are longer than 72 characters which causes problems if not properly wrapped.
Daniel Nesbitt
A: 

you can try to export as "Runnable jar" in eclipse. I have also problems, when i export as "jar", but i have never problems when i export as "Runnable jar".

cupakob
I don't see a "Runnable jar" option in the export windows, just a JAR file :(
which version of eclipse are you using? i have it in the Ganymede....screrenshot here:http://bufka.ath.cx/dslr/Eclipse-Export.pngBut i dont know, if that is default settings or not.
cupakob
+1  A: 

try

java -cp "your_jar.jar:lib/referenced_jar.jar" com.your.main.Main

If you are on windows, you should use ";" istead of ":"

artemb
+5  A: 

You could run it without the -jar command line argument if you happen to know the name of the main class you wish to run:

java -classpath .;myjar.jar;lib/referenced-class.jar my.package.MainClass
Adam Paynter
woohoo, it worked! Thanks :)
I searched forever to figure this out!
chotchki