我刚把我的(正在工作的)wicket项目签到一台新的开发机器上,每当我试图启动jetty时,我都会突然出现这个错误。
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会重新构建它。找不到的类包含我正在尝试运行的主方法,并且应该启动嵌入式jetty。即使cd’ing到目录,看到文件并在命令行上键入java Start.class
也会出现相同的错误,但措辞略有不同。
Wicket和嵌入式jetty-classNotFoundException似乎是相关的,但并不像后面描述的那样,在加载Start类之后会发生错误。
我做了什么:
- 从存储库签出了项目
- 运行mvn干净安装
- 运行mvn eclipse:eclipse
- 在eclipse中创建项目
- 尝试启动应用程序
- 撞墙
老实说,我不认为这是三柱门或码头的问题,但由于他们都以某种方式参与其中,我希望有人解决了这个问题。。。
我检查过的东西:
- 这个文件真的在那里,它是最新的,可读的
- 我试着查看调用
javap Start.class
的字节码,但没有运气(ERROR:Could not find Start.class
) - 使用文本编辑器打开类文件(看起来是"propperlybinary")
- 运行
mvn jetty:run
(启动并运行jetty和webapp)
帮助:
正如Martijn所建议的那样,我抓住了一个全新的快速入门,并比较了入门课程。来自quickstart的那个工作得很好,我和diff工具唯一能找到的区别是连接器上的端口发生了变化,但来自quicksstart的类接受了这些,没有任何问题。然后,我将这个类从quickstart复制到我的项目中,它在Dummy.java的名称下运行良好。在删除了有问题的类,清理了工作区并将其重命名为Start.java后,它就停止了工作。将其重新命名为Dummy,使其恢复工作状态。
所以我找到了一个可行的变通办法,但仍然不知道出了什么问题。
您在Start类中引用的某个内容找不到:它是ClassDefNotFoundException,这是最难解决的错误之一。它阻止类加载器加载您的Start类。
IMO最好的方法是生成一个新的快速启动,运行它,并将东西从你自己的启动类转移到快速启动类,直到它崩溃。