【问题标题】:NoClassDefFoundError inside jarjar 内的 NoClassDefFoundError
【发布时间】:2013-09-19 23:43:22
【问题描述】:

我有一个类,它位于一个名为 com.toptur.sysTray 的包中,它所做的只是加载系统托盘,它不使用任何外部包。我创建一个 SysTray 对象来安装系统托盘。一切都很好。我可以从命令行运行应用程序并安装系统托盘。但是当我尝试从类文件创建一个 jar 并运行它时,我得到 NoClassDefFoundError。

包及其类文件在我的应用程序不使用 ant 外部 jar 的 jar 中。只是 java 提供的类。

如果从 jar 中构建一个 .exe 文件,它会再次开始工作而不会出现任何错误。

我怎样才能找到这个?

  <target name="jar" depends="">
  <jar destfile="build/toptur.jar" > 
    <manifest>
      <attribute name="Built-By" value="Toptur"/>
      <attribute name="Main-Class" value="gotacan"/>
    </manifest>
    <fileset dir="build">
       <include name="**/*.class"/>
    <include name="**/*.png"/>
<exclude name="**/*.jar"/>
  </fileset>
</jar>

我使用上述代码从 ant 目标创建 jar 文件。驱动程序不在包中。它位于 gotacan.java

我使用 java -jar toptur.jar 运行它

程序的其余部分正常工作,它仅在我尝试使用该程序包时引发异常。

【问题讨论】:

  • 如何创建 jar 文件以及如何运行它?
  • 你能显示整个 NoClassDefFound 堆栈跟踪吗?
  • 你的班级真的用小写首字母命名为“gotacan”吗?
  • 删除我的答案,以便显示在未回答的问题列表中。
  • 嗯,这也可能是由于路径名的拼写。您可能在路径中有大写字母,但在包名称中只有小写字母。在 Windows 上,这可能仍然有效,但是当这些东西被打包到 jar 中时它可能会失败

标签: java jar noclassdeffounderror


【解决方案1】:

Class not Found Exception 应该提及它正在寻找的类的名称。

由于类路径中只有 jar,它应该在 jar 中,但它不是。找出原因,可能的原因:

  • ant构建包时class文件不在其所在位置
  • 表示包名的目录结构没有根植于所有其他类的根处
  • 类文件所在的位置不包含在ant放入jar的文件列表中。

祝你好运

注意:jar 只是一个有态度的 zip 文件,因此您可以使用任何 zip 程序来检查其中实际包含哪些文件。

【讨论】:

  • 他也可以直接使用命令行中的jar xvf toptur.jar 来解压jar。
  • true(假设参数是正确的)但很少有人知道这一点,而几乎每个开发人员都知道至少使用一个 zip 工具
  • 另外请注意,单个类可以根据类组成生成多个.class文件。
【解决方案2】:

我猜你的清单要么缺少主类名称、类路径,要么 jar 没有正确包含包目录路径。

tutorial 可能会有所帮助。你的听起来很简单,但你忽略了一件小事。

更新:主类的名称必须是完全解析的类名,包括完整的包。如果你的类在一个包中,那就是你出错了。

【讨论】:

  • main cass 不在包中。其余的组件是。除了这堂课之外,其他每一堂课都解决得很好。所有包都在 com.toptur 文件夹中
【解决方案3】:

可能取决于您运行程序所使用的 JRE,以及您使用它来构建和构建 .exe 所使用的 JVM。

SysTray 功能是相当新的(Java6),所以如果你在运行时系统路径上有一些旧的 JRE 或 JVM

java -jar toptur.jar

它可以找到您编写的类,但不能从 JRE 中找到它使用的类。

【讨论】:

    【解决方案4】:

    我在尝试使用 ant 为开源项目制作 jar 时遇到了类似的问题。

    我与作者取得了联系,他们使用 eclipse 来导出 jar。我模仿了他们的建议,发现 jar 文件的大小存在明显差异。我没有花时间来确定导致一个工作而另一个不工作的差异。但是,您可以使用类似的过程来使您的东西正常工作。如果是这样,也许您可​​以看看差异并与我们分享结果:)

    以下是我的问题和解决方法的链接:Xerces-for-Android NoClassDefFoundError When Using Jar Instead of Source Code

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-17
      • 2014-01-30
      • 1970-01-01
      • 2015-01-25
      • 2012-08-21
      相关资源
      最近更新 更多