我刚刚将我的(工作)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 到该目录,查看该文件并在命令行中键入 java Start.class 也会出现相同的错误,但措辞略有不同。
Wicket and embedded jetty - classNotFoundException似乎相关,但并非如此,因为稍后在加载 Start 类之后会发生所描述的错误。
我做了什么:
- 从存储库中 checkout 了该项目
- 运行 mvn clean install
- 运行 mvn eclipse:eclipse
- 在 eclipse 中创建项目
- 尝试启动应用
- 撞墙
老实说,我不认为这是一个 Wicket 口或 jetty 问题,但由于它们都以某种方式参与其中,我希望有人已经解决了这个问题......
我检查的事情:
- 该文件确实存在,是最新且可读的
- 我尝试查看调用
javap Start.class
的字节码,但没有成功(错误:找不到 Start.class
) - 使用文本编辑器打开类文件(看起来“正确的二进制”)
- running
mvn jetty:run
(启动并与 web 应用程序一起运行 jetty)
有什么帮助:
正如 Martijn 所建议的,我获取了一个新的快速入门并比较了 Start 类。快速入门中的那个工作得很好,我和我的差异工具唯一的区别是连接器上的端口发生了变化,但快速入门中的类接受了这些,没有任何问题。然后我将快速入门中的类复制到我的项目中,它在 Dummy.java 的名称下运行良好。删除有问题的类、清理工作区并将其重命名为 Start.java 后,它停止工作。将其重命名回 Dummy 使其恢复工作状态。
所以我找到了一个可行的解决方法,但仍然不知道出了什么问题。
最佳答案
您在 Start 类中引用的某些内容未找到:它是 ClassDefNotFoundException,这是最难解决的错误之一。它阻止类加载器加载您的 Start 类。
在我看来,前进的最佳方法是生成一个新的快速启动,运行它,并将内容从您自己的启动类移动到快速启动类,直到它崩溃。
关于java - Wicket Jetty 与快速启动中的 Start.java 集成停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13397955/