wake-up-neo.com

HttpClient NoClassDefFoundError

Ich versuche, eine Beispielanwendung von HttpClient 4.0.1 auszuführen. Dies ist die Datei ClientMultiThreadedExecution.Java aus dem Abschnitt "Beispiele". Ich füge diese Dateien in den Klassenpfad ein: 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 und die Datei wird korrekt kompiliert. Zur Laufzeit bekomme ich folgende Fehlermeldung:

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)

Vermisse ich eine Referenz? Es scheint ein Klassenpfadfehler zu sein, aber ich kann nicht herausfinden, welche JAR-Datei eingefügt werden soll. Vielen Dank im Voraus für Ihre Hilfe.

13
user389753

Diese Ausnahme besagt, dass die angegebene Klasse im runtime classpath fehlt. 

Es gibt verschiedene Möglichkeiten, den Laufzeitklassenpfad anzugeben, je nachdem, wie Sie das Programm ausführen. Da ein anständiger IDE dies alles transparent von den Händen nimmt, wette ich, dass Sie es in einer Eingabeaufforderung ausführen. 

Wenn Sie es als JAR-Datei mit Java.exe -jar

(Wenn Sie unter Unix/Linux sind, verwenden Sie einen Doppelpunkt anstelle von Semikolon als Pfadtrennzeichen.)

5
BalusC

Diese Klasse befindet sich in httpclient-4.0.1.jar (ich habe sie gerade heruntergeladen, um sicherzugehen). Ich vermute, Sie haben sie nicht ordnungsgemäß in den Klassenpfad eingefügt.

Wie kompilieren und betreiben Sie Ihren Code?

5
Jon Skeet

Wenn Sie Eclipse Luna 2 (4.4.2) in cloudera-quickstart-vm-5.8.0 ausführen, musste ich Folgendes hinzufügen

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

... und dann funktionierte es ohne Fehler

2
George Fisher

Bei diesem Problem stellte sich heraus, dass beim Hinzufügen der Fluent-API als Maven-Abhängigkeit eine andere Version der HTTPClient-API importiert wurde als die, die ich bereits verwendete. Beide Versionen der API wurden im resultierenden JAR-Ordner lib gepackt. Der Versionskonflikt hat diesen Fehler verursacht.

Durch Hinzufügen von Einträgen zu Ihrem Klassenpfad wird das Problem behoben, da Sie lediglich manuell angeben, welche Version verwendet werden soll. Um das zugrunde liegende Problem zu beheben, musste ich jedoch vor dem Neuerstellen nur den Zielordner löschen (oder maven clean ausführen). Dadurch wurden alle "zwischengespeicherten" Bibliotheks-JARs entfernt und beim nächsten Build nur die richtige erneut heruntergeladen.

Hoffe das hilft jemandem!

0
Jacob Ensor