我们有一个安装在 Windows 环境中的 Java Web 应用程序。我们使用商业产品 Advanced Installer 来构建 MSI。安装程序会安装 Tomcat 7、Apache 2.0 并部署我们的应用程序代码。
在升级过程中,tomcat 文件会更新,tomcat 服务会重新安装。我们收到一条通知,提示并非所有文件都可安装,因此安装后需要重新启动。
如果我们忽略重启提示,一切都会顺利运行。但是,一旦计算机重新启动,Java 就不再起作用,Apache Tomcat Windows 服务也不会启动。即使在 JRE bin 目录中运行“java”或“java -version”也会导致以下错误:
C:\Program Files\Java\jre6\bin>java -version VM 初始化期间发生错误 java/lang/NoClassDefFoundError: java/lang/Object
我们的安装程序不会修改任何 Java 文件,只会修改已安装的 tomcat 文件。因此,我很困惑是什么原因导致 Java 停止工作。
唯一已知的解决方法是完全重新安装 Java,然后重新启动 Tomcat 服务。有人知道是什么原因导致 Java JRE 损坏并且仅在计算机重新启动后才会失败吗?我们在 32 位和 64 位操作系统(包括 Windows XP、Windows Server 2003 和 Windows Server 2008 R2)上重现了此问题。
答案1
您的安装程序可能正在尝试覆盖 JRE 文件。比较正常系统和损坏系统之间的 JAVA 注册表项和系统路径设置。我猜是注册表项已被覆盖。
答案2
以下帖子提到了我们遇到过的同样的事情,即当服务使用 Java 运行时,如果 Java 更新程序尝试进行更新,则可能会破坏 Java:
Tomcat 7.0.22 Windows 服务因 JRE 更新而中断
我想知道您是否在安装 Tomcat 后运行了 Java 更新,从而导致了此问题。
答案3
你需要审核你的安装程序,检查一下每件事它会改变并验证:
- 它需求执行该更改
- 这一改变不会破坏其他任何东西