我需要你的帮助。我在处理 Tomcat 类加载器时遇到了不寻常的问题。我有一个 WAR,在 WAR 中有一个具有本地方法的第三方 JAR。 WAR首次在开发服务器部署成功,运行了3个月左右。
上周,我做了一些代码重构,想部署更新的WAR,所以我删除了旧实例并部署了WAR。但是现在重新部署之后,老是面临NoClassDefFoundError。我重新部署了几次WAR,结果都是一样的,NoClassDefFoundError。
奇怪的是,当我在我的笔记本电脑中部署更新的 WAR 时也使用 Tomcat,它工作正常。我的同事也尝试使用 Tomcat 在他的笔记本电脑上部署,它工作正常。
我已经删除了工作目录中的文件,但仍然出现 NoClassDefFoundError。我关闭了 Tomcat,删除了 webapp 文件夹中的实例,再次将更新后的 WAR 复制到 webapp 文件夹中,再次打开 Tomcat,但仍然出现错误。
开发服务器的Tomcat有什么问题?
最佳答案
在 JVM 的生命周期中,您只能注册一次 native 库。我怀疑当您更新 WAR 时,它尝试再次注册 native 库,但失败了,进而导致 NoClassDefFoundError。重启 Tomcat 服务器即可修复,符合这一理论。
如果您发布包含 native 库的 WAR,那么最安全的做法是每次需要更新应用程序时重新启动 Tomcat。
关于java - Tomcat 类加载器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19130972/