问候,
我正在玩mahout,我写了一个基本的java类,它导入了一些库。编译时我的类路径似乎是正确的,我根本没有任何错误或抱怨。
然而,当我运行编译的类时,我得到一个例外,说明......
Exception in thread "main" java.lang.NoClassDefFoundError: Test
Caused by: java.lang.ClassNotFoundException: Test
答案 0 :(得分:6)
我的猜测是.
不在你的类路径上。例如,您可能正在编译:
javac -cp foo.jar:bar.jar Test.java
然后运行您需要的代码
java -cp foo.jar:bar.jar:. Test
您正在编译的代码不需要在类路径上,因为您提供代码(因此无法找到) - 这就是它设法编译但不运行的原因
当然,这只是猜测 - 如果您可以发布用于编译和运行代码的命令,那将有所帮助。
答案 1 :(得分:2)
我现在收到错误
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
您在课程路径上遗漏了slf4j-api.jar
。使用SLF4J,您始终需要slf4j-api.jar
和另一个jar bind a logging framework。实际上,如果您不关心日志记录,请使用slf4j-nop.jar
代替slf4j-log12.jar
。
更新: Mahout似乎在Maven中央存储库中可用,因此使用Maven可以简化类路径设置过程。如果您不是在学习Maven,请考虑使用MOP这是一个命令行启动程序来运行Java内容,它可以透明地下载Maven工件及其依赖项并设置类路径。
答案 2 :(得分:1)
编译时间类路径听起来正确;运行时类路径是错误的。
来自该类的javadoc:
如果是Java虚拟机,则抛出 ClassLoader实例尝试加载 在一个类的定义中(作为一部分 正常方法调用或作为一部分 使用new创建一个新实例 表达式)并没有定义 可以找到课程。
搜索的类定义 当前执行时存在 类被编译,但定义 再也找不到了。
您是否在当前目录中看到Test.class文件?也许你误将其编译到另一条路径。
答案 3 :(得分:1)
如果您正在使用Mahout,请注意在使用Maven构建它之后,它将在目标/目录中生成“* .job”文件,其中包含打包在一起的所有依赖项。它只是一个.jar文件。