0

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

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

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

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

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

4

1 回答 1

1

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

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

于 2013-10-02T16:45:09.757 回答