是什么导致未引用的类的ClassNotFoundException?

时间:2012-06-29 17:07:15

标签: java jar classnotfoundexception

我试图在我的Java应用程序中实现Apache commons-compress时遇到错误:

  

java.lang.ClassNotFoundException:org.apache.commons.compress.archivers.ArchiveEntry“

我有this post中描述的完全相同的问题,除了我没有使用Bukkit(无论是什么)。 [expletive] OP留下了令人愤怒的最后一篇文章,“无论如何,我找到了一个解决方案。案件已关闭!”而不是分享解决方案,所以我不知道他做了什么来解决它。

我没有使用ArchiveEntry,而是使用TarArchiveEntry,我假设它导入了ArchiveEntry。即使我导入了所谓的缺失类,Eclipse也会警告未使用的导入。奇怪的是,如果我删除了我的TarArchiveEntry导入,警告会消失,但是包含对TarArchiveEntry错误的引用的行。

我以前从未遇到过这个问题。似乎TarArchiveEntry类包含错误并且无法导入ArchiveEntry,但是我看不到广泛使用的库,例如包含这种基本错误的apache commons。

我的暗示有什么问题吗?

2 个答案:

答案 0 :(得分:3)

您的CLASSPATH存在问题。您需要将其设置为包含包含该类的库。它似乎包含在commons-compress中,这意味着你应该有一个名为commons-compress.jar或类似文件的文件,确保它在你的类路径中。

答案 1 :(得分:1)

我的类路径确实存在问题。在我的项目目录中,我将以下行添加到.classpath文件中(它是隐藏的,所以仔细看看):

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

添加此行后,我不再获得ClassNotFoundException。我不确定为什么这解决了这个问题,因为我正在使用我的.classpath文件中找不到的几个其他库(例如commons-fileupload-1.2.jar),因为它们不会抛出任何异常。

我现在的问题是,当我将jar添加到Eclipse中的buildpath时,为什么Eclipse没有修改此文件?另外,为什么我需要在我的.classpath文件中添加commons-compress,而不是commons-fileupload?