如何在 Eclipse Web 项目中安装 JDBC 驱动程序而不面对 java.lang.ClassNotFoundexception
Posted
技术标签:
【中文标题】如何在 Eclipse Web 项目中安装 JDBC 驱动程序而不面对 java.lang.ClassNotFoundexception【英文标题】:How to install JDBC driver in Eclipse web project without facing java.lang.ClassNotFoundexception 【发布时间】:2011-01-22 03:03:47 【问题描述】:There is a VERY similar question 属于我的,但就我而言,我的构建路径中没有任何重复的 jar,因此该解决方案对我不起作用。我已经在谷歌搜索了几个小时,但我在那里找到的解决方案都没有真正解决我的问题。我正在为作业创建一个具有一些数据库连接的网站。我正在使用 mysql 数据库,在 Eclipse 中开发并在 Windows 上运行。
我不断收到java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
的以下代码:
import java.sql.*;
//...
public void someMethodInMyServlet(PrintWriter out)
Connection connection = null;
PreparedStatement query = null;
try
out.println("Create the driver instance.<br>");
Class.forName("com.mysql.jdbc.Driver").newInstance();
out.println("Get the connection.<br>");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "secret");
query = connection.prepareStatement( "SELECT * FROM customers");
//...
catch (Exception e)
out.println(e.toString()+"<br>");
//...
当我运行上面的代码时,我得到以下输出:
Create the driver instance.
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
它没有超过Class.forName...
行,我不知道为什么!这是我所做的:
-
下载mysql-connector。
把它放在我的MySQL文件夹
C:\Program Files\MySQL\mysql-connector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar
。
在 Eclipse 中打开了项目属性。
将外部 Jar 添加到我的构建路径,我选择了mysql-connector-java-5.1.12-bin.jar
。
每当我尝试使用 servlet 时,我都会遇到相同的错误,无论我是否有 jar 或没有。你能帮我解决这个问题吗?
【问题讨论】:
在命令行上使用非 servlet 测试程序会发生什么?java -cp C:\Program Files\MySQL\mysql-connector-java-5.1.12-bin.jar;...
@trashgod 我刚刚做了一个空主类的虚拟测试项目:..\Test\src>java -cp "C:\Program Files\MySQL\mysql-con nector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar"; Main.java Exception in thread "main" java.lang.NoClassDefFoundError: Main/java
【参考方案1】:
对于每个将由 web 应用程序使用的 JAR 文件风格的“第 3 方”库,只需将物理 JAR 文件复制/拖放到 web 应用程序的 /WEB-INF/lib
中即可。然后它将在 webapp 的默认类路径中可用。此外,Eclipse 足够聪明,可以注意到这一点。无需为构建路径而烦恼。但是,请确保删除您之前添加的所有不必要的引用,否则可能会发生冲突。
另一种方法是通过将物理 JAR 文件放到服务器自己的 /lib
文件夹中来将其安装在服务器本身中。当您使用服务器提供的 JDBC 连接池数据源时,这是必需的,而后者又需要 MySQL JDBC 驱动程序。
另见:
How to add JAR libraries to WAR project without facing java.lang.ClassNotFoundException? Classpath vs Build Path vs /WEB-INF/lib How should I connect to JDBC database / datasource in a servlet based application? Where do I have to place the JDBC driver for Tomcat's connection pool? JDBC CLASSPATH Not Working【讨论】:
谢谢。我有同样的问题,你的解决方案有效。但是在 webapp 的 '/WEB-INF/lib' 中添加 JAR 文件和在 buildpath 中添加相同的 JAR 文件有什么区别?如果每个 3rd 方库都应该添加到 '/WEB-INF/lib' 中,那么为什么 buildpath 有添加外部 JAR 文件的选项? @Hiral:项目的 Build Path 中的该部分用于编译时类路径。要使 JAR 也最终出现在运行时类路径中,请将其添加到项目的 Deployment Assembly 列表中。请注意,当构建/导出 WAR 时,这最终会以/WEB-INF/lib
中的 JAR 形式结束。那么为什么不把它放在首位呢?
非常感谢..我不明白为什么相同的代码在 java 应用程序中工作,但在 servlet 中却没有..你的答案很好:)
对于 Eclipse 的任何其他新用户,您可以通过转到 Properties > 'Deployment Assembly' > 'Add...' > 'Java Build Path Entries' 并选择将 jar 添加到项目的部署程序集中你的罐子。 :)【参考方案2】:
由于您在servlet
中运行它,您需要让servlet 容器 可以访问该jar。您可以将连接器作为应用程序war
的一部分包含在内,或者将其作为servlet 容器的扩展库和数据源管理内容的一部分(如果有的话)。第二部分完全取决于您拥有的容器。
【讨论】:
我正在通过 Eclipse 运行 Tomcat 服务器...您能否根据这些信息更具体一些?我必须把罐子放在哪里? 将 mysql-connector-java-5.1.6-bin.jar 放到 \Apache Tomcat 6.0.18\lib 文件夹中【参考方案3】:其他人关于使驱动程序 JAR 可用于您的 servlet 容器是正确的。我的评论是为了建议您从命令行验证驱动程序本身是否完好。
不要空的main()
,试试这样的东西,改编自包含的文档:
public class LoadDriver
public static void main(String[] args) throws Exception
Class.forName("com.mysql.jdbc.Driver");
在我的平台上,我会这样做:
$ ls mysql-connector-java-5.1.12-bin.jar mysql-connector-java-5.1.12-bin.jar $ javac LoadDriver.java $ java -cp mysql-connector-java-5.1.12-bin.jar:.负载驱动程序在您的平台上,您需要使用;
作为路径分隔符,如here 和here 所述。
【讨论】:
【参考方案4】:将 mysql-connector-java-5.1.6-bin.jar 放到 \Apache Tomcat 6.0.18\lib 文件夹中。您的问题将得到解决。
【讨论】:
仅当 OP 使用容器管理的DataSource
时,而不是当 OP 手动摆弄 DriverManager
时。对于将 JAR 放在 webapp 的 /WEB-INF/lib
中,就像我的回答一样绰绰有余。
我尝试了所有其他更优雅的方法——但都失败了。蛮力 - 将它放在库中确实 - 有效。谢谢【参考方案5】:
你不应该做的事情(尤其是在处理共享项目时)
好的,在遇到同样的问题并在此处和其他地方阅读了一些答案之后。似乎将external lib
放入WEB-INF/lib
并不是一个好主意,因为它pollute webapp/JRE libs with server-specific libraries
- for more information check this answer"
我不推荐的另一个解决方案是:将其复制到 tomcat/lib 文件夹中。虽然这可能有效,但很难管理共享(例如 git)项目的依赖关系。
好的解决方案1
创建vendor
文件夹。把你所有的外部库放在那里。然后,将此文件夹作为依赖项映射到您的项目。在eclipse中你需要
-
将您的文件夹添加到
build path
Project Properties
-> Java build path
Libraries
-> 添加外部库或任何其他解决方案来添加您的文件/文件夹
deployment Assembly
(reference)
Project Properties
-> Deployment Assembly
Add
-> Java Build Path Entries
您现在应该会在构建路径上看到库列表,您可以指定这些库包含在已完成的 WAR 中。
选择你想要的,然后点击完成。
好的解决方案2
使用maven
(或任何替代方法)来管理项目依赖关系
【讨论】:
【参考方案6】:只需按照以下步骤操作:
1) 安装eclipse 2) 将 Apache 导入 eclipse 3) 安装mysql 4) 下载mysqlconnector/J 5) 解压压缩文件,浏览它,直到你得到 bin 文件。然后将包含 bin 的文件夹中存在的所有文件放到 C:\Program Files\mysql\mysql server5.1/ 然后在eclipse中定义驱动时给出与地址相同的路径。
这一切都很简单。
【讨论】:
【参考方案7】:如果问题仍然存在,
把- mysql-connector-java-5.0.8-bin jar 放在 Tomcat->lib-> 文件夹中的某个位置(无论您将 Tomcat 安装在哪里)。并更改您的环境变量(通过单击 Mycomputer 的属性 - 高级系统设置 - 环境变量 - 并设置一个新的变量名和变量值作为您的 lib 文件所在的位置。不要忘记在路径末尾输入 ; )
如果问题仍然存在 尝试下载 commons-collections-2.0.jar (http://www.docjar.com/jar_detail/commons-collections-2.0.jar.html) 并将 jar 粘贴到 Tomcat-lib 中 mysql jar 所在的相同位置(即)。
清理您的项目-停止您的服务器-最后尝试运行。
【讨论】:
【参考方案8】:很多次我都面临这个问题,我遇到过 ClassNotFoundException。 如果 jar 不在物理位置。
所以请确保 .jar 文件(mysql 连接器)在 WEB-INF lib 文件夹的物理位置。和 确保在 cmd 中使用 shutdown 命令重新启动 Tomcat。 它应该工作。
【讨论】:
【参考方案9】:对我有用的唯一解决方案是将 .jar 文件放在 WEB-INF/lib 下。希望这会有所帮助。
【讨论】:
【参考方案10】:假设您的项目是基于 maven 的,请将其添加到您的 POM:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
Save > Build > 并再次测试连接。有用!您实际的 mysql java 连接器版本可能会有所不同。
【讨论】:
【参考方案11】:将 mysql-connector-java-5.1.38-bin.jar 放到 C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib 文件夹中。通过执行这个程序
【讨论】:
【参考方案12】:我的问题有点不同。而不是jdbc:oracle:thin:@server:port/service
,我将其命名为server:port/service
。
在 GlobalNamingResources.Resource 的 url
属性中缺少 jdbc:oracle:thin:@
。但是我忽略了tomcat异常的
java.sql.SQLException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'server:port/service'
【讨论】:
【参考方案13】:对于这个错误:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
你需要:
Import java.sql.*;
Import com.mysql.jdbc.Driver;
即使它在应用程序运行之前不使用。
【讨论】:
以上是关于如何在 Eclipse Web 项目中安装 JDBC 驱动程序而不面对 java.lang.ClassNotFoundexception的主要内容,如果未能解决你的问题,请参考以下文章
如何在myeclipse中安装tomcat和部署项目到tomcat中
Pythonwindows下Eclipse中安装集成webpy框架