HttpClient NoClassDefFoundError

ぐ巨炮叔叔 提交于 2019-11-29 09:23:22

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)

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?

Running Eclipse Luna 2 (4.4.2) inside cloudera-quickstart-vm-5.8.0 I had to add the following

  • apache-httpcomponents-httpcore.jar
  • httpclient-4.5.3.jar
  • httpclient-cache-4.5.3.jar

... and then it worked without errors

When I experienced this issue, it turned out that when I added the Fluent API as a Maven dependency, it imported a different version of the HTTPClient API than the one I was already using. Both versions of the API were packaged in the resulting JAR's lib folder. The version conflict is what caused this error.

Adding entries to your classpath will fix the problem, because you're just manually specifying what version to use. However, to fix the underlying problem, I just needed to delete my target folder before rebuilding (or run maven clean). This removed any "cached" library JARs, and on the next build, only re-downloaded the correct one.

Hope that helps somebody!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!