Java eclipse/tomcat:deploy&x27;不再工作(ClassNotFoundException)

Java eclipse/tomcat:deploy&x27;不再工作(ClassNotFoundException),java,linux,eclipse,tomcat,classnotfoundexception,Java,Linux,Eclipse,Tomcat,Classnotfoundexception,我正在运行EclipseHeliosServiceRelease1,在Linux UbuntuNattyNarhall中运行Tomcat7.0.12 我一直很高兴重新部署我的webapp,直到它毫无理由停止工作。将显示以下异常: SEVERE: Allocate exception for servlet Index java.lang.ClassNotFoundException: obliquid.servlet.Index at org.apache.catalina.loader

我正在运行EclipseHeliosServiceRelease1,在Linux UbuntuNattyNarhall中运行Tomcat7.0.12

我一直很高兴重新部署我的webapp,直到它毫无理由停止工作。将显示以下异常:

SEVERE: Allocate exception for servlet Index
java.lang.ClassNotFoundException: obliquid.servlet.Index
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
  • 在Servers选项卡中,我看到了“本地主机上的Tomcat v7.0服务器[已启动,已同步]
  • 我的项目显示为Tomcat v7.0服务器的子项目
  • 在Properties中,Java构建路径,Source I'veproject/src Source文件夹
  • 在属性、Web部署程序集中,我有以下映射:/WebContent->/、/src->/Web-INF/classes、/test->/build/classes
  • 我的src目录在obliquid/Servlet/Index.java中包含一个Servlet
  • 我已经试着点击清理模块工作目录…并发布
  • 我试图在Eclipse服务器选项卡中停止和启动服务器
我还应该查什么?谢谢

更新尽管我现在正在处理新项目,但我回来检查旧项目,现在它神秘地工作了。我想我无法找到发生了什么

然而今天在这个新项目中,我有404个错误,没有明显的原因,我发现右键单击Tomcat服务器并选择“Clean…”是有用的。也许这会有所帮助

选择“Clean…”表示:“Clean将放弃所有发布状态并从头开始重新发布。是否确实要清除所有已发布的资源?”。选择“是”,我解决了问题

更新2在新项目上再次发生。404个错误,这次它们不会消失

Stop -> Clean... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Clean... -> Start (404)
Stop -> Remove on the application ->  Clean... -> Run As -> Run on Server -> (404)  
Exit Eclipse, Start Eclipse
Start the server -> (404)

更新3结果表明,这次我没有注意到启动过程中侦听器类引起的异常。解决问题后,它工作了。我想我应该在凌晨3点停止工作。

我建议您停止并再次启动Tomcat服务器。热部署不会永远工作;有些问题将导致您必须在重新部署几次后重新启动。

我发现此过程非常有用:

  • 单击服务器选项卡,如果服务器正在运行,则停止正在使用的服务器
  • 再次右键单击服务器并选择清理…
  • 再次右键单击并选择清理Tomcat工作目录…
希望ClassNotFoundException现在应该消失了

还有一次,我在服务器启动时启动了一个类,该类出现问题,侦听器类(ServletContextListener)出现异常。当ServletContextListener在启动期间引发异常时,应用程序部署将中止,因此出现404错误。在这种情况下,修复导致异常的问题,使应用程序重新工作


编辑:这个较短的过程在大多数情况下对我有效,但今天不起作用,我不得不遵循Mico的扩展过程。我的建议是,如果你有类似的问题,首先尝试这个较短的过程。如果问题仍然存在,请尝试使用Mico的。

在Tomcat 6和Eclipse Ganymede上,我发现以下问题:我要像魅力一样工作:

一站式服务器

2项目->清洁

3项目生成(我禁用了自动生成)

4删除服务器

5删除服务器文件夹

6重新启动Eclipse

7创建新服务器,添加项目并启动:)


需要一些时间,但效果很好。我的问题是一个恼人的侦听器启动问题,但这似乎是类似的:tomcat的一个属性。顺便说一句:现在我也是一个玻璃鱼迷。

这可能是我从中学到的。对我来说,这听起来像是一个类加载器问题

背后的理论:

  • Java不仅使用类的类型,还使用加载它的类加载器来标识实例的类型

    A类a1=新a1; ClassA a2=SomeOtherClass.giveMeInstanceOfA(); a1=a2

如果其他类使用不同的类加载器,这个示例将失败,因为Java会说它们不一样

  • 演讲者还提到一些服务器默认使用大约45个不同的类加载器
这在实践中意味着什么:

你将你的webapp部署到服务器上,一切都正常运行。服务器缓存类以及加载它们所需的所有内容。现在你进行热部署,服务器可以使用新的(或不同的)属性加载新类classloader。这是它开始变得危险的地方,因为从现在起,内存中有两个不同的类,它们应该是相同的。简单的操作,如强制转换(ClassA=(ClassA)new ClassA())失败,类中找不到新方法(因为服务器使用的缓存版本没有此方法)

在这一点上,我重新启动服务器,清理工作目录(以清除缓存的版本),并开始将热部署视为关键

如果有可能尝试Mikkos procedere,这就解决了问题,这个解释可以帮助您理解原因


我知道这并不能解决您的问题,但可以给您一些可能发生的情况的提示。

说到Tomcat的热部署,您确实会遇到各种问题,其中最不严重的是内存泄漏,这就是您必须重新启动应用程序的原因。我建议您尝试JRebel以快速恢复”进行并保存任何更改,然后刷新浏览器并立即查看更改“。您可以找到JRebel实践实验室,它展示了如何将它与Tomcat和Eclipse结合使用

我遇到了同样的问题-尝试了上述所有方法,当我尝试启动服务器时,Eclipse总是冻结,即使我删除了所有服务器配置并使用新下载的tomcat实例创建了一个新的服务器配置。不管怎样,直到我搬家,问题才解决