web-dev-qa-db-fra.com

HttpClient NoClassDefFoundError

J'essaie d'exécuter un exemple d'application à partir de HttpClient 4.0.1. C'est le fichier ClientMultiThreadedExecution.Java de la section exemples. J'ai mis dans ces fichiers dans le 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 et le fichier est compilé correctement. Au moment de l'exécution, j'obtiens l'erreur suivante:

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)

Est-ce que je manque une référence? Cela ressemble à une erreur de chemin de classe mais je ne peux pas déterminer quel fichier jar inclure? Merci d'avance pour votre aide.

13
user389753

Cette exception indique que la classe mentionnée est manquante dans le répertoire runtime classpath. 

Il existe plusieurs façons de spécifier le chemin d'accès aux classes au moment de l'exécution, en fonction de l'exécution du programme. Puisqu'un IDE décent prend tout cela de manière transparente entre vos mains, je parie que vous l'exécutez dans une invite de commande. 

Si vous l'exécutez en tant que fichier JAR avec Java.exe -jar

(si vous êtes sous Unix/Linux, utilisez deux points au lieu de points-virgules comme séparateur de chemin)

5
BalusC

Cette classe est dans httpclient-4.0.1.jar (je viens de la télécharger pour en être sûr), alors je suppose que vous ne l'avez pas correctement insérée dans le chemin de classe.

Comment compilez-vous et exécutez-vous votre code?

5
Jon Skeet

Exécuter Eclipse Luna 2 (4.4.2) à l'intérieur de cloudera-quickstart-vm-5.8.0

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

... et ensuite cela a fonctionné sans erreur

2
George Fisher

Lorsque j'ai rencontré ce problème, il s'est avéré que lorsque j'ai ajouté l'API Fluent en tant que dépendance Maven, elle importait une version de l'API HTTPClient différente de celle que j'utilisais déjà. Les deux versions de l'API ont été empaquetées dans le dossier lib du fichier JAR résultant. Le conflit de version est la cause de cette erreur.

Ajouter des entrées à votre chemin de classe résoudra le problème, car vous spécifiez simplement manuellement la version à utiliser. Cependant, pour résoudre le problème sous-jacent, je devais simplement supprimer mon dossier cible avant de reconstruire (ou d'exécuter maven clean). Cette opération supprimait tous les fichiers JAR de bibliothèque "mis en cache" et, lors de la construction suivante, ne re-téléchargeait que le fichier correct.

J'espère que ça aide quelqu'un!

0
Jacob Ensor