【问题标题】:Tomcat classloader is not workingTomcat 类加载器不工作
【发布时间】:2013-10-02 06:14:27
【问题描述】:

我需要你的帮助。我在处理 Tomcat 类加载器时遇到了不寻常的问题。我有一个 WAR,并且在 WAR 内部有一个具有本机方法的第三方 JAR。 WAR首次成功部署在开发服务器上,已经运行了3个月左右。

上周,我做了一些代码重构,想部署更新后的 WAR,所以我删除了旧实例并部署了 WAR。但是现在重新部署后,我总是面临NoClassDefFoundError。我重新部署了几次WAR,结果都是一样的,NoClassDefFoundError。

奇怪的是,当我在笔记本电脑中部署更新后的 WAR 时也使用 Tomcat,它工作正常。我的同事也尝试在他的笔记本电脑上使用 Tomcat 进行部署,效果很好。

我已经删除了工作目录中的文件,但仍然出现 NoClassDefFoundError。我关闭了Tomcat,删除了webapp文件夹中的实例,再次将更新的WAR复制到webapp文件夹中,再次打开Tomcat,但仍然出现错误。

开发服务器的Tomcat有什么问题?

【问题讨论】:

  • 检查 Tomcat 的版本。
  • 尝试从tomcat/work/Catalina/中删除应用程序文件夹并重启服务器
  • 你能显示错误吗?看起来你删除了一个依赖 jar
  • @JunedAhsan 我做到了,但没有任何改变。

标签: java tomcat tomcat7 classloader


【解决方案1】:

在 JVM 的生命周期中,您只能注册一次本机库。我怀疑当您更新 WAR 时,它尝试再次注册本机库,但失败了,进而导致 NoClassDefFoundError。重启 Tomcat 服务器修复它与这个理论是一致的。

如果您发布的 WAR 包含本机库,那么最安全的做法是在每次需要更新应用程序时重新启动 Tomcat。

【讨论】:

  • 我确实重启了几次开发服务器,仍然出现错误。我也同意该解决方案,因为它适用于我笔记本电脑中的 Tomcat,但它不适用于开发服务器。任何其他想法?顺便谢谢。
猜你喜欢
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多