views:

107

answers:

3

I am trying to run a sample application from HttpClient 4.0.1. It is the file ClientMultiThreadedExecution.java from the examples section. I put in these files in the classpath: apache-mime4j-0.6.jar;commons-codec-1.3.jar;commons-logging-1.1.1.jar;httpclient-4.0.1.jar;httpcore-4.0.1.jar;httpmime-4.0.1.jar and the file compiles correctly. At runtime I get the following error:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

Am I missing a reference? It seems like a classpath error but I can't figure out which jar file to include? Thank you in advance for your help.

A: 

That class is in httpclient-4.0.1.jar (I've just downloaded it to be sure) so I suspect you haven't put it in the classpath properly.

How are you compiling and running your code?

Jon Skeet
Using Textpad. It's in the same directory as the JAR files and I have this in the configuration $File -cp .;apache-mime4j-0.6.jar;commons-codec-1.3.jar;commons-logging-1.1.1.jar;httpclient-4.0.1.jar;httpcore-4.0.1.jar;httpmime-4.0.1.jarIt compiles fine but doesn't run.
A: 

jarfinder tells that the class is in httpclient-4.0-alpha1.jar. I can assume it is also in httpclient-4.0.1.jar.

So the answer is - make sure you have correctly configured your classpath.

Bozho
A: 

This exception tells that the mentioned class is missing in the runtime classpath.

There are several ways to specify the runtime classpath, depending on how you're executing the program. Since a decent IDE takes this all transparently from your hands, I bet that you're running it in a command prompt.

If you're running it as a JAR file by java.exe -jar or doubleclicking the file, then you need to specify the classpath in the Class-Path entry of the JAR's MANIFEST.MF file. Note that the %CLASSPATH% environment variable and -cp and -classpath arguments are ignored whenever you execute a JAR.

If you're running it as a "plain vanilla" Java application by java.exe, then you need to specify it in the -cp or -classpath argument. Note that whenever you use this argument, the %CLASSPATH% environment variable is ignored.

Either way, the classpath should exist of a (semi)colonseparated string of paths to JAR files (either absolute paths or relative to current working directory). E.g.

java -cp .;/path/to/file1.jar;/path/to/file2.jar com.example.MyClass

(if you're on Unix/Linux, use colon instead of semicolon as path separator)

BalusC