【问题标题】:ClassNotFoundException in MySQL Connector/JMySQL 连接器/J 中的 ClassNotFoundException
【发布时间】:2012-05-31 16:06:16
【问题描述】:

以前有人问过这个问题,但我找不到我需要的答案。

1) 在 Eclipse IDE 中使用 Class.forName("com.mysql.java.Driver") 一切正常。我加载了正确的jar(mysql-connector-java-5.1.20-bin.jar),没有例外。

当我为我的应用 a1.jar 创建一个 jar 并双击该 jar 时,我得到了 ClassnotFoundException

我在 Windows XP 中创建了一个 .bat 文件

java -classpath c:\temp\mysql-connector-java-5.1.20-bin.jar -jar c:\temp\a1.jar app statrs 有同样的异常。

此外,使用System.getProperty ("java.class.path") 显示c:\temp\a1.jar,而在 IDE 中我可以看到多个目录

【问题讨论】:

  • 你能发布堆栈跟踪吗?你怎么确定是找不到mySql驱动类?

标签: java mysql exception jdbc classloader


【解决方案1】:

当您从 jar 运行应用程序时,您可能需要检查添加类路径依赖项的清单文件方式。看看这个Manifest Classpath

【讨论】:

  • 这是有道理的。我试过了,但没有任何改变。我确保清单文件中有换行符。
  • 您是否将 mysql-connector jar 捆绑到您的 jar 中?
  • 不,文档表明不要这样做。我将它放在与 jar 相同的目录中。我打开 jar 并检查清单是否存在并包含正确的 jar 名称。
【解决方案2】:

驱动程序是com.mysql.jdbc.Driver,而不是com.mysql.java.Driver

您收到 ClassNotFoundException,因为 Connector/J 库中没有 com.mysql.java.Driver 类。

【讨论】:

  • 抱歉,提交时出现拼写错误,它是 jdbc.Driver:这就是它在 Eclipse IDE 中工作的原因。
【解决方案3】:

如果您使用-jar 执行文件,则任何外部类路径(在命令行或环境中提供)都会被忽略。它只查看META-INF/MANIFEST.MF 文件中的Class-path: 条目。如果此处未指定 MySQL jar,则不会加载它。

【讨论】:

  • 谢谢。类路径没有被复制到 META-INF/MANIFEST.MF。它在我的 Manifest.txt 中。打开 .jar,您的输入解决了问题。
【解决方案4】:

您可以做的另一件事是将所有必需的库放在一个可执行 jar 中的单个文件中。 以下回复可能会有很大帮助:

从 Eclipse 3.5 开始,您还可以使用 eclipse 向导导出可执行 jar。

使用 File > Export... 并选择 Runnable JAR 文件。 Runnable Jar Export 窗口有一个单选按钮,您可以在其中选择提取或将所需的库打包到生成的 jar 中。

【讨论】:

  • 恕我直言,最好构建一个正确的清单文件并引用库,而不是构建一个包含所有外部依赖项的 über-jar。
猜你喜欢
  • 1970-01-01
  • 2010-12-18
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 2017-12-30
相关资源
最近更新 更多