2010-07-12 25 views
12

Sto cercando di eseguire un'applicazione di esempio da HttpClient 4.0.1. È il file ClientMultiThreadedExecution.java dalla sezione degli esempi. Inserisco questi file nel 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 e il file viene compilato correttamente. In fase di esecuzione ricevo il seguente errore:HttpClient NoClassDefFoundError

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) 

Mi manca un riferimento? Sembra un errore di classpath ma non riesco a capire quale file jar includere? Grazie in anticipo per il vostro aiuto.

risposta

5

Questa eccezione indica che la classe indicata manca nel runtime runtime.

Ci sono diversi modi per specificare il percorso di classe di runtime, a seconda di come si sta eseguendo il programma. Dal momento che un IDE decente prende tutto questo in modo trasparente dalle tue mani, scommetto che lo stai eseguendo in un prompt dei comandi.

Se si sta eseguendo in un file JAR da java.exe -jar o doppio clic sul file, quindi è necessario specificare il classpath in Class-Path ingresso del fascicolo della JAR MANIFEST.MF. Si noti che la variabile di ambiente %CLASSPATH% e gli argomenti -cp e -classpath sono ignorati ogni volta che si esegue un JAR.

Se si esegue un'applicazione Java "plain vanilla" da java.exe, è necessario specificarlo nell'argomento -cp o -classpath. Si noti che ogni volta che si utilizza questo argomento, la variabile di ambiente %CLASSPATH% è ignorata.

In entrambi i casi, il percorso di classe deve esistere di una (semi) stringa di percorsi separati da due a file JAR (percorsi assoluti o relativi alla directory di lavoro corrente). Per esempio.

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

(se siete su Unix/Linux, utilizza i due punti invece di punto e virgola come separatore di percorso)

5

Quella classe è in httpclient-4.0.1.jar (l'ho appena scaricata per essere sicura), quindi sospetto che non l'abbiate messa nel classpath correttamente.

Come si compila e si esegue il codice?

+0

Utilizzo del pannello di testo. Si trova nella stessa directory dei file JAR e ho questo nella configurazione $ 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.jar Compila bene ma non esegue. – user389753

-1

con Maven questo può essere fatto tramite ambito di importazione.

0

Quando ho riscontrato questo problema, è risultato che quando ho aggiunto l'API Fluent come dipendenza Maven, ha importato una versione diversa dell'API HTTPClient rispetto a quella che stavo già utilizzando. Entrambe le versioni dell'API sono state impacchettate nella cartella lib del JAR risultante. Il conflitto di versione è ciò che ha causato questo errore.

L'aggiunta di voci al classpath risolverà il problema, poiché si specifica semplicemente quale versione utilizzare. Tuttavia, per risolvere il problema sottostante, avevo solo bisogno di cancellare la mia cartella di destinazione prima di ricostruire (o eseguire maven clean). Ciò rimuoveva qualsiasi JAR della libreria "memorizzata nella cache" e, nella build successiva, scaricava solo quello corretto.

La speranza che aiuta qualcuno!

1

Esecuzione di Eclipse Luna 2 (4.4.2) all'interno di cloudera-quickstart-vm-5.8.0 ho dovuto aggiungere il seguente

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

.. e quindi ha funzionato senza errori

Problemi correlati