2012-06-29 46 views
2

我中遇到想實現我的Java應用程序的Apache公地壓縮錯誤:什麼導致未引用類的ClassNotFoundException?

拋出java.lang.ClassNotFoundException:org.apache.commons.compress.archivers.ArchiveEntry」

我有this post中描述的完全相同的問題,除了我沒有使用Bukkit(不管那是什麼)。[expletive] OP留下了一個令人憤怒的最後一篇文章,「無論如何,我找到了解決方案。結案!」,而不是共享的解決方案,所以我不知道他(她)沒有解決這個問題。我不使用ArchiveEntry

,而是TarArchiveEntry,我假設進口ArchiveEntry。即使我導入所謂的缺失類,Eclipse警告一個未使用的導入。好奇的是,如果我刪除了我的TarArchiveEntry導入,警告消失了,但是包含對TarArchiveEntry錯誤的引用的行。

我從來沒有遇到過這個問題。似乎TarArchiveEntry類包含一個錯誤,並且無法導入ArchiveEntry,但我看不到一個廣泛使用的庫,例如包含這種基本錯誤的apache commons。

我的執着有什麼不對嗎?

+0

我試過使用其他Java tar庫,但我得到了相同的行爲。要重現,請使用來自此處(http://code.google.com/p/jtar/)的tar bean示例。 – StockB

+0

如果您包含一個演示問題的簡短示例,那將是一個很大的幫助。我編譯並運行jtar頁面中的'TarOutputStream'示例時沒有任何問題(它看起來不依賴於commons-compress)。我還寫了一個虛擬類,它導入'org.apache.commons.compress.archivers.tar.TarArchiveEntry'(我不得不搜索正確的軟件包,因爲你沒有提及它),它編譯並運行時沒有任何問題。你必須在某個地方出現類路徑問題,一個簡短的例子可以幫助我們確定這個問題。 –

+0

您也可以嘗試在命令行上使用簡單的'javac'和'java'命令(使用適當的'-classpath'參數)以將問題與Eclipse配置隔離。 –

回答

0

我的classpath的確存在問題。在我的項目目錄,添加以下行到.classpath文件(它是隱藏的,所以仔細觀察):

<classpathentry exported="true" kind="lib" path="/home/stockb/commons-compress-bin/commons-compress-1.4.1/commons-compress-1.4.1.jar"/> 

增加這樣之後,我不再得到ClassNotFoundException異常。我不確定爲什麼這樣解決了這個問題,因爲我使用了幾個其他庫(例如commons-fileupload-1.2.jar),這些庫在我的.classpath文件中找不到,因此不會引發任何異常。

我現在的問題是,爲什麼Eclipse在將Eclipse添加到構建路徑時沒有修改此文件?另外,爲什麼我需要將commons-compress,而不是commons-fileupload添加到我的.classpath文件中?

3

CLASSPATH存在問題。您需要將其設置爲包含包含該類的庫。它似乎被包含在commons-compress中,這意味着你應該有一個名爲commons-compress.jar或類似文件的文件,確保它在你的類路徑中。

+0

這個AKA是Eclipse中的「構建路徑」嗎?我已將JAR添加到項目的構建路徑中。過去我已成功使用了多個第三方JAR庫。 – StockB

+0

另外,在我的項目中沒有構建錯誤,如果我的JAR沒有找到,情況就會如此。該錯誤僅在運行時顯示,當我在Web瀏覽器中加載頁面時。 – StockB

+0

更新 - 我已經將jar複製到我的WEB-INF/lib目錄中,並得到相同的結果。 :-( – StockB

相關問題