使用 War 文件部署到 Tomcat 导致 ClassNotFoundException

Posted

技术标签:

【中文标题】使用 War 文件部署到 Tomcat 导致 ClassNotFoundException【英文标题】:Deployment to Tomcat using War file resulting in ClassNotFoundException 【发布时间】:2012-10-15 02:52:30 【问题描述】:

我正在开发一个 Web 应用程序,但遇到了困难,可以参考一些建议。所以申请是由一个不再在我们公司的同事写的。他们在后端使用 Java 和 javascript 为 Apache Tomcat 编写了一个 Web 应用程序。该应用程序使用 JDBC api 与 SQL Server 数据库进行交互。这个人在 Eclipse 中完成了所有开发并以这种方式运行它。

我正在尝试使用此 Web 应用程序并将其移至服务器。我尝试使用 Eclipse 导出 WAR 文件,然后将其放在 Tomcat webapps 文件夹中。然后,当我启动 Tomcat 时,程序被提取出来。到现在为止还挺好。该网站出现并且运行良好。但是,当我尝试访问依赖数据库信息的页面时,一切都将变为 NULL。我浏览了 Tomcat 日志,发现在标准输出中给出了以下消息:

ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

我曾假设 WAR 文件将包含所有依赖项,但我猜测可能并非如此。如果有人有经验,这是发生了什么事吗?如果有人知道,有没有办法告诉 Eclipse 这样做?否则,我的选择是什么?我不是 Java 开发人员,所以如果需要,我不知道如何安装 JDBC。

感谢任何帮助。 迈克

【问题讨论】:

您似乎没有安装 JDBC 驱动程序 jar。你有它在tomcat的lib文件夹中吗?可能是你的同事在他/她的 tomcat 上安装了它。 你使用什么构建系统来构建war文件? Ant/Maven/别的什么? 【参考方案1】:

您可以执行以下操作

    转到Microsoft JDBC Driver download 页面并下载 JDBC 驱动程序并将其安装到某个位置。 使用7-zipwinzip 等zip 实用程序打开.war 文件。 从您安装下载的 JDBC 驱动程序的sqljdb_4.0/enu 目录中复制 sqljdbc.jar,并将其粘贴到解压缩的 war 文件的 WEB-INF/lib 中。 将其压缩为 .war 文件并再次部署。

这将使应用程序运行。

如果您想永久修复此问题,那么您应该在构建系统中的 war 文件中添加停止以包含 sqljdbc.jar 到您的 war,即在 build.xml 中,如果您使用的是 ANT 或在您的 Maven 的 pom.xml 中的 dependencies 部分下用于此特定依赖项。

【讨论】:

感谢您的回复。这似乎解决了我的 DJBC 问题。另外为了让其他人了解第 4 步,我使用以下命令将其重新压缩:“jar cf ../app.war *”。如果 JDK 不在您的路径中,那么您可能需要提供完全限定的扩展。【参考方案2】:

您不需要手动执行“导出WAR>复制到tomcat>启动tomcat”,您可以配置eclipse直接在您的tomcat安装中进行部署,首先双击tomcat服务器,然后选择“使用tomcat安装”在“服务器位置”部分。

确保您的应用程序在您的项目 WebContent/WEB-INF/lib 目录中包含 SQLServer JDBC 驱动程序 (sqljdbc4.jar)(假设您的同事使用 Eclipse“动态 Web 项目”进行项目布局),如果没有,请从 @987654321 下载@,解压后复制到上面提到的文件夹,下次启动tomcat时会自动为你添加。

如果项目使用maven项目布局(项目根文件夹下有一个名为pom.xml的文件),请使用following instructions在本地仓库安装依赖(Maven和微软关于驱动程序的许可和重新分配,因此没有回购)

【讨论】:

以上是关于使用 War 文件部署到 Tomcat 导致 ClassNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

将 WAR 部署到 Tomcat(Spring Boot + Angular)

重新部署war需要重启tomcat吗?

将 Vaadin/SpringBoot 部署为 WAR

如何使用命令提示符将war文件部署到tomcat?

将版本化的 WAR 文件部署到 tomcat

使用 Intellij 构建 War 并部署到 Tomcat