0

我刚刚在一台新的开发机器上检查了我的(工作)检票口项目,突然间,每当我尝试启动码头时,我都会收到这个错误。

java.lang.NoClassDefFoundError: net/unbewaff/Start
Caused by: java.lang.ClassNotFoundException: net.unbewaff.Start
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread "main" 

类文件在那里,当我删除文件时,eclipse 会重建它。未找到的类是包含我试图运行并应该启动嵌入式码头的主要方法的类。即使 cd'ing 到目录,查看文件并java Start.class在命令行上键入也会出现相同的错误,但措辞略有不同。

Wicket 和嵌入式码头 - classNotFoundException似乎是相关的,但不是因为那里描述的错误发生在稍后和加载 Start 类之后。

我做了什么:

  1. 从存储库中签出项目
  2. 运行 mvn 全新安装
  3. 运行 mvn eclipse:eclipse
  4. 在eclipse中创建了项目
  5. 试图启动应用程序
  6. 撞墙

老实说,我不认为这是一个检票口或码头问题,但由于他们都以某种方式参与其中,我希望有人遇到并解决了这个问题......

我检查的事情:

  • 该文件确实存在,它是最新且可读的
  • 我试图看一下javap Start.class没有运气的字节码调用(ERROR:Could not find Start.class
  • 使用文本编辑器打开类文件(看起来“完全二进制”)
  • running mvn jetty:run(与 webapp 一起启动并运行 jetty)

有什么帮助:

正如 Martijn 建议的那样,我抓起一个新的快速入门并比较了 Start-classes。快速入门中的那个工作得很好,我的差异工具和我能找到的唯一区别是连接器上的端口已更改,但快速入门中的类接受了这些,没有任何问题。然后我将这个类从快速入门复制到我的项目中,它在 Dummy.java 的名称下运行良好。删除有问题的类后,清理工作区并将其重命名为 Start.java 它停止工作。将其重命名为 Dummy 使其恢复工作状态。

所以我找到了一个可行的解决方法,但仍然不知道出了什么问题。

4

1 回答 1

1

您在 Start 类中引用的某些内容未找到:它是 ClassDefNotFoundException,这是最难解决的错误之一。它会阻止类加载器加载您的 Start 类。

前进的最佳方式是 IMO 生成一个新的快速启动,运行它,然后将内容从您自己的启动类移动到快速启动类,直到它中断。

于 2012-11-16T09:00:10.167 回答