我有一个Java程序,可以导入一些Weka包。我基本上使用“javac -classpath CLASSPATH:weka.jar program_name.java”命令编译它,一切都很好。
当我使用“java -Xmx2024m -classpath CLASSPATH:weka.jar program_name”运行它时,程序抛出一个“NoClassDefFound”错误,指出无法找到主类“program_name”!
这个问题确实令人费解,因为编译工作正常,而program_name.class文件存在于该文件夹中。 weka.jar也存在。
有人可以告诉我我做错了吗?
谢谢!
答案 0 :(得分:2)
怎么样
java -Xmx2024m -classpath %CLASSPATH%:.:<path_to>/weka.jar program_name
。
您尝试运行的程序(包括其程序包名称)必须可以从您所在的目录中导航。
因此,如果您的程序是com.dave.MyProgram并且您将其编译到/ home / dave / bin中,并且weka.jar文件位于/ tmp中。然后你会尝试
cd /home/dave/bin
java -Xmx2024m -classpath .:/tmp/weka.jar com.dave.MyProgram
这是创建一个包含当前目录和/tmp/weka.jar的类路径,并运行程序的完全限定名称。
如果你的程序不在包中,那么colland将是
java -Xmx2024m -classpath .:/tmp/weka.jar MyProgram
答案 1 :(得分:0)
简而言之,如果在编译期间存在类但在运行时期间在java类路径中不可用,则会出现NoClassDefFoundError。通常,当您获得NoClassDefFoundError:
时,您将在日志中看到以下行如何解决java.lang.NoClassDefFoundError:
Java解决方案中的java.lang.NoClassDefFoundError NoClassDefFoundError的明显原因是Classpath中没有特定的类,所以我们需要将它添加到Classpath中,或者如果我们期待它,我们需要检查它在Classpath中不可用的原因成为。可能有多种原因,如:1)Java Classpath中没有类。 2)您可能正在使用jar命令运行程序,并且未在清单文件的ClassPath属性中定义类。 3)任何启动脚本都会覆盖Classpath环境变量。 4)因为NoClassDefFoundError是java.lang.LinkageError的子类,所以如果其中一个依赖项(如本机库)可能不可用,它也会出现。 4)检查日志文件中的java.lang.ExceptionInInitializerError。由于静态初始化失败而导致的NoClassDefFoundError非常常见。 5)如果您在J2EE环境中工作,而多个类加载器中的Class的可见性也会导致java.lang.NoClassDefFoundError,请参阅示例和场景部分以进行详细讨论。
我们现在将看到java.lang.NoClassDefFoundError之前的几个示例和场景以及它是如何解决的。这可以帮助您解决Java应用程序中NoClassDefFoundError的根本原因。
答案 2 :(得分:0)
尝试编译并运行提供路径,而不是使用CLASSPATH
喜欢这样
javac -cp .:(path)/weka.jar program_name.java
用weka.jar的路径替换路径(除非它与你编译的路径在同一路径,然后只是把。:weka.jar)
还要确保将所需的课程加载/导入到程序中,例如
Class.forName("what.ever.the.weka.class.you.are.using.is");