【问题标题】:Why am I getting NoClassDefFoundError / ClassNotFoundException为什么我收到 NoClassDefFoundError / ClassNotFoundException
【发布时间】:2014-05-20 14:57:03
【问题描述】:

我一直在关注this tutorial

在命令提示符下运行 FirstExample 类是因为它开始因为某种原因而崩溃。尝试运行以下命令后:

java FirstExample

我得到以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: FirstExample

我知道由于类路径(由于某种原因)它找不到 FirstExample 类,所以我执行了以下命令:

java -cp . FirstExample

现在它返回一个新的异常:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

现在它找不到 JDBC 驱动程序。这让我很困惑,因为对于初学者来说,我通过 Eclipse 运行了完全相同的编码并且它按预期工作,其次,我尽可能确保我执行 Eclipse 正在执行的同一个类文件,并且命令提示符仍然返回异常.我还把 FirstExample 文件放在一个单独的文件夹中,只是为了将 MySQL 连接器复制并粘贴到同一个文件夹中,但我仍然遇到异常。

我只是不明白发生了什么,有人可以帮我吗?

非常感谢。


连接器的文件路径如下:

C:\Program Files\MySQL\mysql-connector-java-3.1.14\mysql-connector-java-3.1.14-bin.jar

希望这会有所帮助。


出于测试目的,我将 FirstExample 类放在以下路径下:

C:\java

【问题讨论】:

  • 你的类路径中有类似 ojdbc14.jar 的 jar 文件吗?如果不是出于测试目的,您可以将此 jar 放在类文件所在的同一位置,然后重试。

标签: java mysql eclipse jdbc cmd


【解决方案1】:

这让我很困惑,因为对于初学者来说,我通过 Eclipse 运行完全相同的编码并且它按预期工作

这是因为在 Eclipse 中您将库添加到构建路径中,并且在运行您的项目时它将自动使用类路径中指定的所有库。这可以在这里注明:

为了让您通过命令行工具使用第三方库执行项目,您应该在类路径中显式手动指定库:

java -cp <path/to/mysql_jar/goes/here>:. FirstExample

根据您的评论:

MySQL文件的路径是:C:\Program Files\MySQL\mysql-connector-java-3.1.14\mysql-connector-java-3.1.14-bin.jar (...) 我已经放置C:\java

下的 FirstExample 类

这应该是要使用的命令行:

java -cp "C:\Program Files\MySQL\mysql-connector-java-3.1.14\mysql-connector-java-3.1.14-bin.jar; ." FirstExample

请注意,最好将所有第三方库存储在项目中的单个文件夹中,通常称为 lib,并在其中放置引用。假设您当前的文件夹有一个 lib 文件夹并且所有第三方库都复制到那里,那么命令行将是:

java -cp "lib\*; ." FirstExample

【讨论】:

  • 感谢您的及时回复; MySQL 文件的路径是:C:\Program Files\MySQL\mysql-connector-java-3.1.14\mysql-connector-java-3.1.14-bin.jar。我试过这个命令没有成功,但是我可能输入不正确。你能澄清一下我将如何在命令提示符下指定库吗?非常感谢。
  • 另外出于测试目的,我将 FirstExample 类放在C:\java 下。
  • 根据您的回答,它是否一直这样工作?因为如果是这样,您会认为本教程会指定这一点。 xp
  • 是的,教程中有介绍。
  • 有吗?我一定错过了,它到底在哪里?它确实提到了在 JDBC - Environments 下设置环境变量,但我没有看到任何提到 -cp"lib\*; ."
【解决方案2】:

使用下一个示例将您的 jars 添加到类路径:

java -cp "jdbc.jar;lib/*" my.package.FirstExample

【讨论】:

    【解决方案3】:

    您还需要在类路径中有 com.mysql.jdbc.Driver 类(以及所有导入的类)。

    您应该下载 jar (http://dev.mysql.com/downloads/connector/j/5.0.html) 并将其添加到类路径中。

    【讨论】:

    • 你想暗示只要把 jar 放在同一个目录中就会把它放在类路径上?
    • 不,这不是我想说的……但我就是这么说的。我要编辑。
    • 感谢您的回复;是的,我已经下载了教程中描述的 Connector/J,因为这个问题仍然存在。再次感谢您的回复。
    【解决方案4】:

    当您在 Class.forName() 中编写的类名存在问题或包未设置为类路径变量时,会引发 ClassNotFound 异常。确保已将 jar 文件添加到类路径 (C:............\jarfilename.jar;)。 这适用于任何 JDBC 驱动程序和 jar 文件。添加到类路径的 .jar 文件对 IDE 不可见,在这种情况下,您需要将 jar 文件添加到 buildpath(在 eclipse 中),或者您也可以将 jar 文件复制到 Java 安装中可用的 ext 文件夹文件夹。

    另请注意,数据库软件的jar文件可能会根据您使用的数据库软件版本而有所不同,例如如果您使用的是Oracle 11g,则需要ojdbc6.jar文件,在其他版本的Oracle中数量会有所变化比如ojdbc14.jar等

    【讨论】:

    • 感谢您的及时回复。我检查了系统环境变量设置下的CLASSPATH,如下:C:\Program Files\MySQL\mysql-connector-java-3.1.14\mysql-connector-java-3.1.14-bin.jar。再次感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    相关资源
    最近更新 更多