使用 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-zip
或winzip
等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的主要内容,如果未能解决你的问题,请参考以下文章