eclipse / tomcat:部署不再工作(ClassNotFoundException)

我正在运行Eclipse Helios Service Release 1,在Ubuntu Ubuntu Natty Narwhal中运行Tomcat 7.0.12。

我一直很高兴重新部署我的Web应用程序,直到它停止工作,显然没有理由。 显示以下exception:

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) 
  • 服务器选项卡我已经“本地主机Tomcat v7.0服务器[开始,同步]
  • 我的项目显示为Tomcat v7.0 Server的一个子项
  • 在属性中,Java Build Path,Source我有Project / src Source文件夹
  • 在Properties,Web Deployment Assembly中,我有以下映射: / WebContent – > // src – > / WEB-INF / classes/ test – > / build / classes
  • 我的src目录包含一个Servlet,位于obliquid / servlet / Index.java中
  • 我已经尝试点击清洁模块工作目录…发布
  • 我试图从Eclipse服务器选项卡中停止并启动服务器

我还应该检查什么? 谢谢。

更新尽pipe现在我正在与新项目合作,但是我回过头来检查旧项目,神秘地现在它正在工作。 我想我将无法find发生的事情。

然而,今天的新项目,我有404错误没有明显的原因,我发现,右键单击Tomcat服务器,并select“清洁…”可以是有用的。 也许它可以帮助。

select“Clean …”说:“Clean将放弃所有的发布状态并重新发布,你确定要清除所有已发布的资源吗?” select是的,我解决了这个问题

更新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原来,这一次我只是没有注意到在启动期间由监听器类引起的exception。 解决问题后,它的工作。 猜猜我应该在凌晨3点停止工作。

在Tomcat 6和Eclipse Ganymede上,我发现下面的链像魅力一样工作:

1停止服务器

2个项目 – >清洁

3项目建设(我有自动建设禁用)

4删除服务器

5删除servers文件夹

6重新启动Eclipse

7创建新的服务器,添加项目,并开始:)

需要一些时间,但像魅力一样工作。 我的问题是一个恼人的listner开始的问题,但这似乎是类似的东西:在tomcat属性。 顺便说一句:现在我也是一个大的Glassfish粉丝。

我发现这个程序是有用的:

  • 单击“ 服务器”选项卡,如果正在运行,请停止正在使用的服务器
  • 再次右键单击服务器,然后选择清理…
  • 再次右键单击并选择清理Tomcat工作目录…

希望ClassNotFoundException现在应该消失。

另外一次,我在服务器启动时启动了一个类,在侦听器类(ServletContextlistner)中出现异常。 当ServletContextlistner在启动期间引发异常时,应用程序部署被中止,因此出现404错误。 在这种情况下修复引起异常的问题,使应用程序再次工作。

编辑 :这个较短的程序为我工作大部分时间,但今天没有工作,我不得不遵循Mico的扩展程序。 我的建议是,如果你有类似的问题,首先尝试这个较短的过程。 如果问题仍然存在,请尝试使用Mico。

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

我不知道当我看到+25接受答案是否真的准确

首先,如果你要删除服务器,那么清理它有什么意义呢? 这将不必要地花费你的时间 ,没有什么用处。

所以我只会说5,6,7步应该做的魔术

5删除servers文件夹

6重新启动Eclipse

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

这可能是我在2011年的会议上学到的。 对我来说这听起来像一个类加载器的问题。

背后的理论:

  • Java不仅使用类的类型,而且使用加载它的类加载器来标识实例的类型。 这意味着一个simle操作可能会失败,例如

    ClassA a1 = new a1; ClassA a2 = SomeOtherClass.giveMeInstanceOfA(); a1 = a2;

如果SomeOtherClass使用不同的类加载器,这个例子会失败,因为Java会说它们不一样。

  • 演讲者还提到,一些服务器默认使用大约45个不同的类加载器。

这在实践中意味着什么:

你把你的webapp部署到服务器上,一切运行正常。 服务器缓存类和他需要的东西加载他们的地方。 现在你做一个热的部署人员,服务器可能会用新的(或不同的)类加载器加载新的类。 这是开始变得危险的一点,因为从现在起,你在记忆中有两个不同的阶层,应该是相同的。 像类型转换(ClassA a =(ClassA)new ClassA())的简单操作失败,找不到类中的新方法(因为服务器采用没有此方法的缓存版本),….

这是我重新启动服务器,清理工作目录(摆脱缓存版本),并开始考虑热部署作为关键的事情。

如果可以尝试Mikkos procedere,这解决了这个问题,这个解释可以帮助你理解为什么。

我知道这不能解决你的问题,但可能会给你一些提示可能发生的事情。

我已经在编程方面获得了一些新的经验,并且我不再需要Eclipse + Tomcat组合。 这里有几种方法可以帮助您摆脱使用该组合的需要:

首先,不要一起使用它们!

  • 您可以使用其他可用的IDE,例如IntellijIdea(这不是免费的,但值得投资的)有一个属性,当您调试Java代码时,您可以更改代码并逐个编译Java文件,然后建议如果你想在服务器上更新它。 几乎从不需要重新启动(当然,它有时会丢失,但主要是有效的)。

  • 使用独立的tomcat服务器,而不是Eclipse / IDE内部的服务器。 第一个技巧只有在调试外部服务器时才起作用,IDE内部什么都没有。 第二个提示是:如果你只是改变了jsp或html的内容,那么这些文件可以通过unix cp或windows copy命令手动复制到tomcat的webapp文件夹的正确位置,如果你碰巧开发的文件长度相同,您可以根据需要多次复制文件夹内容(例如myFolder / *。jsp),无需重新启动。 当您触摸或编辑并保存webapps文件夹内的web.xml文件,然后刷新浏览器上的可见页面时,所做的更改就会显示出来。 可能用CTRL + F5进行硬刷新是最好的方法。

感谢@Verdan对他的评论,否则我不会再回来回答。

说到Tomcat的热部署,你确实会遇到各种各样的问题,其中最少的就是内存泄漏,这就是为什么你必须重启应用程序。 我建议尝试使用JRebel来快速完成“创建并保存任何更改,然后刷新浏览器并立即查看更改”。 你可以找到JRebel动手实验,它展示了如何在Tomcat和Eclipse中使用它。 http://www.javapassion.com/rebels/jrebel_basics/

我遇到了同样的问题 – 尝试了以上所有内容,当我尝试启动服务器时,Eclipse始终处于冻结状态,即使删除了所有的服务器配置并创建了新的下载的Tomcat实例。 无论如何,直到我搬到一个新的工作区,重新导入项目,并创建一个新的服务器问题没有解决。 看起来像一个Eclipse错误对我来说…所以如果没有别的作品,这是要走的路…

我目前正在同样的问题挣扎,但没有提到这里没有帮助我。 无论如何,我发现如果我:

  1. 在eclipse中停止服务器
  2. 在其他地方运行tomcat(在我的例子中是xamp分布)
  3. 停止当前运行的tomcat
  4. 在eclipse中启动tomcat

一切工作正常,当然,直到我改变了代码中的东西,并尝试再次测试。

我可以通过禁用maven自然来解决这个问题(右键单击项目>> maven >>禁用maven自然)。 然后重新启用它(右键单击project >> configure >> convert to maven project)。 我已经尝试了上面的所有其他技巧和窍门,但是这是最后的工作。