2010-07-12 80 views
12

我想從HttpClient 4.0.1運行示例應用程序。它是來自示例部分的文件ClientMultiThreadedExecution.java。我把這些文件放在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並且文件編譯正確。在運行時,我得到以下錯誤: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) 

我是否缺少參考?這似乎是一個類路徑錯誤,但我不知道哪個jar文件包含?預先感謝您的幫助。

回答

5

此例外說明運行時類路徑中缺少上述類。

有幾種方法可以指定運行時類路徑,具體取決於您如何執行程序。由於體面的IDE將這一切從你的手中透明地取出,我敢打賭你正在命令提示符下運行它。

如果您通過java.exe -jar將它作爲JAR文件運行或雙擊該文件,則需要在JAR的MANIFEST.MF文件的Class-Path條目中指定類路徑。請注意,每當執行JAR時,%CLASSPATH%環境變量和-cp-classpath參數都會被忽略

如果您以java.exe作爲「普通香草」Java應用程序運行它,則需要在-cp-classpath參數中指定它。請注意,無論何時使用此參數,%CLASSPATH%環境變量是忽略

無論哪種方式,類路徑都應該存在一個(半)結合分隔的JAR文件路徑(絕對路徑或相對於當前工作目錄)。例如。

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

(如果你是在Unix/Linux,使用冒號而不是分號作爲路徑分隔符)

5

該類在httpclient-4.0.1.jar中(我剛剛下載了它確定),所以我懷疑你沒有正確地將它放在類路徑中。

你如何編譯和運行你的代碼?

+0

使用TextPad。它與JAR文件位於同一個目錄中,我在配置文件 $ 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 編譯好但不運行。 – user389753 2010-07-12 20:01:28

-1

與Maven這可以通過導入範圍來完成。

0

當我遇到這個問題時,事實證明,當我將Fluent API添加爲Maven依賴項時,它導入了不同於我已經使用的HTTPClient API版本。 API的兩個版本都打包在生成的JAR的lib文件夾中。版本衝突是導致此錯誤的原因。

將條目添加到類路徑中將解決問題,因爲您只是手動指定要使用的版本。但是,爲了解決底層問題,我只需要在重建之前刪除我的目標文件夾(或者運行maven clean)。這刪除了任何「緩存」的庫JAR,並且在下一個版本中,只重新下載了正確的一個。

希望幫助別人!

1

在cloudera-quickstart-vm-5.8中運行Eclipse Luna 2(4.4.2)。0我不得不添加以下

  • Apache的httpcomponents-httpcore.jar
  • 的HttpClient-4.5.3.jar
  • HttpClient的緩存-4.5.3.jar

..然後它沒有錯誤地工作