HttpClient NoClassDefFoundError
Je suis en train de lancer un exemple d'application à partir HttpClient 4.0.1. C'est le fichier ClientMultiThreadedExecution.java à partir 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 compile correctement. Lors 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)
Suis-je manque une référence? Il semble comme un chemin de classe d'erreur mais je ne vois pas le fichier jar à inclure? Je vous remercie d'avance pour votre aide.
source d'informationauteur user389753
Vous devez vous connecter pour publier un commentaire.
Cette exception indique que la catégorie est manquant dans le runtime classpath.
Il y a plusieurs façons de spécifier l'exécution du classpath, selon la façon dont vous êtes l'exécution du programme. Depuis un décent IDE prend tout cela de manière transparente à partir de vos mains, je parie que vous êtes en cours d'exécution dans une invite de commande.
Si vous êtes en cours d'exécution comme un fichier JAR par
java.exe -jar
ou en double-cliquant sur le fichier, vous devez spécifier le chemin de classe dans leClass-Path
entrée du POT deMANIFEST.MF
fichier. Notez que le%CLASSPATH%
variable d'environnement et-cp
et-classpath
arguments sont ignoré chaque fois que vous exécutez un BOCAL.Si vous êtes en cours d'exécution comme un "plain vanilla" Java application par
java.exe
alors vous avez besoin de le spécifier dans la-cp
ou-classpath
argument. Notez que lorsque vous utilisez cet argument, la%CLASSPATH%
variable d'environnement est ignoré.De toute façon, le classpath doit exister d'un (semi -) colonseparated chaîne de chemins d'accès aux fichiers JAR (soit un chemin absolu ou relatif au répertoire de travail courant). E. g.
(si vous êtes sous Unix/Linux, utiliser la virgule au lieu du point-virgule comme séparateur de chemin d'accès)
Que la classe est en httpclient-4.0.1.jar (j'ai juste téléchargé pour être sûr) donc je pense que vous n'avez pas le mettre dans le classpath correctement.
Comment êtes-vous de la compilation et de l'exécution de votre code?
Eclipse Luna 2 (4.4.2) à l'intérieur de cloudera-guide de démarrage rapide-vm-5.8.0 j'ai dû ajouter le suivant
... et puis il a travaillé sans erreurs
Quand j'ai rencontré ce problème, il s'est avéré que lorsque j'ai ajouté de l'API Fluent comme une dépendance Maven, il a importé une version différente de la HTTPClient API que j'utilise déjà. Les deux versions de l'API ont été emballés dans le JAR du dossier lib. Le conflit de version est ce qui a causé cette erreur.
Ajouter des entrées à votre classpath va résoudre le problème, parce que vous êtes juste en spécifiant manuellement la version à utiliser. Cependant, pour résoudre le problème sous-jacent, j'ai juste besoin de supprimer mon dossier cible avant de la reconstruction (ou exécuter maven propre). Ce retiré toute "mise en cache" bibliothèque des Pots, et sur la prochaine génération, seulement re-téléchargé la bonne.
Espère que ça aide quelqu'un!