0

问候,

我正在玩mahout,我编写了一个基本的 java 类,它导入了一些库。编译时我的类路径似乎是正确的,我根本没有收到任何错误或投诉。

但是,当我运行编译的类时,我得到一个异常说......

Exception in thread "main" java.lang.NoClassDefFoundError: Test
Caused by: java.lang.ClassNotFoundException: Test
4

4 回答 4

6

我的猜测是那.不在你的类路径上。例如,您可能正在编译:

javac -cp foo.jar:bar.jar Test.java

但是然后运行你需要的代码

java -cp foo.jar:bar.jar:. Test

您正在编译的代码不需要在类路径上,因为您正在提供代码(所以没有什么可找到的) - 这就是它设法编译但不运行的原因。

当然,这只是一个猜测——如果你可以发布你用来编译和运行代码的命令,那会有所帮助。

于 2010-02-20T18:26:27.357 回答
2

我现在收到一条错误消息java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

slf4j-api.jar在你的课程路径上失踪了。使用 SLF4J,您总是需要slf4j-api.jar和另一个 jar 来绑定日志框架。实际上,如果您不关心日志记录,请使用slf4j-nop.jar而不是slf4j-log12.jar.

更新: Mahout 似乎在 Maven 中央存储库中可用,因此使用 Maven 可以简化类路径设置过程。如果您不喜欢学习 Maven,请考虑使用MOP,它是一个命令行启动器来运行 Java 东西,可以透明地下载 Maven 工件及其依赖项并设置您的类路径。

于 2010-02-20T19:40:38.603 回答
1

编译时类路径听起来不错;运行时类路径错误。

从该类的javadocs:

如果 Java 虚拟机或 ClassLoader 实例尝试加载类的定义(作为正常方法调用的一部分或作为使用 new 表达式创建新实例的一部分)并且找不到类的定义,则抛出此异常。

搜索到的类定义在编译当前执行的类时已经存在,但无法再找到该定义。

您是否在当前目录中看到了 Test.class 文件?也许你错误地将它编译到另一个路径。

于 2010-02-20T18:26:40.150 回答
1

如果您使用 Mahout,请注意,使用 Maven 构建后,它将在 target/ 目录中生成“*.job”文件,其中包含打包在一起的所有依赖项。它只是一个 .jar 文件。

于 2010-03-10T08:54:19.317 回答