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

2024-11-04 08:42:00
admin
原创
60
摘要:问题描述:我正在 Linux Ubuntu Natty Narwhal 中运行 Eclipse Helios Service Release 1 和 Tomcat 7.0.12。我一直很高兴地重新部署我的 web 应用程序,直到它毫无理由地停止工作。显示以下异常:SEVERE: Allocate except...

问题描述:

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

我一直很高兴地重新部署我的 web 应用程序,直到它毫无理由地停止工作。显示以下异常:

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)
  • 在“服务器”选项卡中,我有“位于 localhost 的 Tomcat v7.0 服务器 [已启动,已同步]

  • 我的项目显示为 Tomcat v7.0 Server 的子项

  • 在属性、Java 构建路径、源中我有Project/src源文件夹

  • 在属性、Web 部署程序集中,我有以下映射:/WebContent -> //src -> /WEB-INF/classes/test -> /build/classes

  • 我的src目录包含obliquid/servlet/Index.java中的 Servlet

  • 我已经尝试点击清理模块工作目录...发布

  • 我尝试从 Eclipse 服务器选项卡中停止并启动服务器

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

更新尽管我现在正在处理新项目,但我还是回来检查旧项目,奇怪的是它现在正在运行。我想我无法发现发生了什么。

但是今天在新项目中,我遇到了 404 错误,但原因不明,我发现右键单击 Tomcat 服务器并选择“清理...”很有用。也许这能有所帮助。

选择“清除...”显示:“清除将丢弃所有发布状态并从头开始重新发布。您确定要清除所有已发布的资源吗?”。选择是,我解决了问题

更新 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 点停止工作。


解决方案 1:

在使用 Tomcat 6 和 Eclipse Ganymede 时,我发现以下链可以很好地工作:

1 停止服务器

2 项目 -> 清理

3 项目构建(我已禁用自动构建)

4 删除服务器

5 删除服务器文件夹

6 重启 Eclipse

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

需要一些时间,但效果很好。我遇到的问题是令人恼火的 Listener 启动问题,但这似乎是类似问题:tomcat 的一个属性。顺便说一句:现在我也是 Glassfish 的忠实粉丝。

解决方案 2:

我发现这个过程很有用:

  • 单击“服务器”选项卡,然后停止正在运行的服务器

  • 再次右键单击服务器并选择清理...

  • 再次右键单击并选择清理 Tomcat 工作目录...

希望 ClassNotFoundException 现在已经消失了。

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

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

解决方案 3:

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

解决方案 4:

我想知道,当我看到被接受的答案+25时它是否真的准确

首先,如果你要删除服务器,那么清理它有什么意义呢?这会浪费你不必要的时间,而且不会给你带来任何好处。

所以我想说,只需5、6、7 步就可以产生神奇的效果

5 删除服务器文件夹

6 重启 Eclipse

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

解决方案 5:

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

背后的理论:

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

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

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

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

这在实践中意味着什么:

您将 Web 应用程序部署到服务器,一切运行正常。服务器将类和加载它们所需的一切缓存到某个地方。现在您进行热部署,服务器可能会使用新的(或不同的)类加载器加载新类。这是开始变得危险的点,因为从现在开始,您在内存中有两个应该相同的不同类。简单的操作(如强制转换(ClassA a = (ClassA) new ClassA()))失败,找不到类中的新方法(因为服务器采用没有此方法的缓存版本),......

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

如果可以尝试 Mikkos 程序并且能够解决问题,那么这个解释可以帮助您理解原因。

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

解决方案 6:

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

解决方案 7:

我在编程方面获得了一些新经验,不再渴求 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 的评论,否则我不会回来再次回答。

解决方案 8:

我能够通过禁用 maven 特性(右键单击项目 >> maven >> 禁用 maven 特性)来解决这个问题。然后重新启用它(右键单击项目 >> 配置 >> 转换为 maven 项目)。我尝试了上述所有其他技巧和窍门,但这是最终奏效的。

解决方案 9:

我遇到了同样的问题 - 尝试了上述所有方法,当我尝试启动服务器时,Eclipse 总是冻结,即使我删除了所有服务器配置并使用新下载的 tomcat 实例创建了一个新配置。无论如何,直到我移动到新的工作区、重新导入项目并创建新服务器后,问题才得到解决。对我来说这似乎是 Eclipse 的一个错误...所以如果其他方法都不起作用,这就是解决办法...

解决方案 10:

我目前正在努力解决同样的问题,但这里提到的任何内容都对我没有帮助。无论如何,我发现如果我:

  1. 在 eclipse 中停止服务器

  2. 在其他地方运行 tomcat(我的情况是 xamp 发行版)

  3. 停止当前正在运行的 tomcat

  4. 在 eclipse 中启动 tomcat

一切都运行良好,当然,直到我改变代码中的某些内容并尝试再次测试它。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   681  
  在项目管理领域,集成产品开发(IPD)流程以其高效、协同的特点,被众多企业视为提升产品竞争力的关键。IPD流程强调跨部门、跨职能的紧密合作,以确保产品从概念到市场各个环节的无缝衔接。然而,实现这一目标并非易事,它需要企业深刻理解并掌握IPD流程中的跨部门协作艺术。本文将深入探讨IPD流程中跨部门协作的三个关键点,旨在为...
IPD项目管理咨询   9  
  掌握IPD流程图:提升团队协作的关键路径在当今快速变化的商业环境中,团队协作的效率与效果直接关系到项目的成功与否。集成产品开发(Integrated Product Development,简称IPD)作为一种先进的研发管理理念,通过跨部门、跨领域的协同工作,能够显著提升产品开发的速度与质量。而IPD流程图,则是这一理...
IPD流程阶段   9  
  IPD流程概述:理解其核心价值与实施背景集成产品开发(Integrated Product Development,简称IPD)是一种先进的产品开发管理理念,它强调跨部门协作、市场导向和快速响应变化的能力。IPD流程不仅关注产品本身的技术创新,更注重将市场、研发、生产、销售等各个环节紧密集成,以实现产品从概念到市场的高...
华为IPD是什么   7  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程以其跨部门协作、高效决策和快速响应市场变化的特点,被众多企业视为提升竞争力的关键。然而,实践IPD流程并非易事,项目管理中的种种错误往往阻碍了其效果的充分发挥。本文旨在深入探讨如何在实施IPD流程时避免这些常见错误,...
IPD框架   7  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用