【问题标题】:What causes ClassNotFoundException for an unreferenced class?是什么导致未引用类的 ClassNotFoundException?
【发布时间】:2012-07-01 05:39:41
【问题描述】:

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

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

我遇到了在this post 中描述的完全相同的问题,只是我没有使用 Bukkit(不管是什么)。 [咒骂] OP 留下了令人气愤的最后一条帖子,“无论如何,我找到了解决方案。案件已结案!”而不是分享解决方案,所以我不知道他做了什么来解决它。

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

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

我的暗示有什么问题吗?

【问题讨论】:

  • 我尝试过使用其他 Java tar 库,但我得到了相同的行为。要重现,请在 Java bean 中使用此处 (code.google.com/p/jtar) 中的 tar out 示例。
  • 如果您包含一个演示问题的简短示例,这将是一个很大的帮助。我从 jtar 页面编译并运行了 TarOutputStream 示例,没有任何问题(它似乎不依赖于 commons-compress)。我还编写了一个导入org.apache.commons.compress.archivers.tar.TarArchiveEntry 的虚拟类(我不得不搜索正确的包,因为你没有提到它)并且它编译并运行没有任何问题。您一定在某个地方遇到了类路径问题,一个简短的示例将帮助我们确定这一点。
  • 您也可以在命令行上尝试简单的javacjava 命令(使用适当的-classpath 参数)来将问题与Eclipse 配置隔离开来。
  • 我创建了这个 (pastebin.com/bvvj0EWM) 类并在我的支持 bean 中创建了它的一个实例。

标签: java jar classnotfoundexception


【解决方案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 中的构建路径时,为什么 Eclipse 没有修改这个文件?另外,为什么我需要在我的 .classpath 文件中添加 commons-compress 而不是 commons-fileupload?

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这又是 Eclipse 中的“构建路径”吗?我已将 JAR 添加到项目的构建路径中。我过去曾成功使用过几个 3rd 方 JAR 库。
    • 另外,我的项目中没有构建错误,如果没有找到我的 JAR,就会出现这种情况。当我在我的网络浏览器中加载页面时,该错误只会在运行时显示出来。
    • 更新 - 我已将 jar 复制到我的 WEB-INF/lib 目录,我得到相同的结果。 :-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2011-11-21
    相关资源
    最近更新 更多