Java 尝试从命令行运行时出现NoClassDefFoundError

Java 尝试从命令行运行时出现NoClassDefFoundError,java,noclassdeffounderror,Java,Noclassdeffounderror,提前道歉-我知道有很多很多非常类似的问题,但我想问一些具体到我的情况 我在同一个目录中有一堆java和jar文件。我能够很好地编译,因此在同一目录中有许多类文件。但当我执行程序时,它会给出一个NoClassDefFoundError,表示找不到指定的类: C:\Users\DB\Desktop\nextreports-integration-demo\src\ro\nextreports\integration> java -cp ".;*.jar" SimpleDemo Exceptio

提前道歉-我知道有很多很多非常类似的问题,但我想问一些具体到我的情况

我在同一个目录中有一堆java和jar文件。我能够很好地编译,因此在同一目录中有许多类文件。但当我执行程序时,它会给出一个NoClassDefFoundError,表示找不到指定的类:

C:\Users\DB\Desktop\nextreports-integration-demo\src\ro\nextreports\integration>
java -cp ".;*.jar" SimpleDemo
Exception in thread "main" java.lang.NoClassDefFoundError: SimpleDemo (wrong nam
e: ro/nextreports/integration/SimpleDemo)
我从一个更高级别的dir那里尝试了同样的方法,但没有什么不同:

C:\Users\DB\Desktop\nextreports-integration-demo\src>java -cp ".\ro\nextreports\
integration\*.jar;.\ro\nextreports\integration" SimpleDemo
Exception in thread "main" java.lang.NoClassDefFoundError: SimpleDemo (wrong nam
e: ro/nextreports/integration/SimpleDemo)
源文件中的package语句是:

package ro.nextreports.integration;
我觉得我忽略了一些非常基本的东西。提前谢谢

编辑:非常感谢。它与以下各项协同工作:

java -cp ".\ro\nextreports\integration\nextreports-engine-6.3.jar;.\ro\nextreports\integration\commons-jexl-2.1.1.jar;.\ro\nextreports\integration\commons-logging-1.1.1.jar;.\ro\nextreports\integration\derby-10.10.1.1.jar;.\ro\nextreports\integration\itext-2.1.7.jar;.\ro\nextreports\integration\itext-rtf-2.1.7.jar;.\ro\nextreports\integration\itextpdf-5.0.6.jar;.\ro\nextreports\integration\jcalendar-1.3.2.jar;.\ro\nextreports\integration\jcommon-1.0.15.jar;.\ro\nextreports\integration\jfreechart-1.0.12.jar;.\ro\nextreports\integration\jofc2-1.0.1.jar;.\ro\nextreports\integration\mysql-connector-java-5.1.23-bin.jar;.\ro\nextreports\integration\mysql-connector-java-5.1.23-bin.jar;.\ro\nextreports\integration\poi-3.7.jar;.\ro\nextreports\integration\winstone-lite-0.9.10.jar;.\ro\nextreports\integration\xstream-1.3.1.jar;" ro.nextreports.integration.SimpleDemo
但是为什么我不能对*.jar文件使用通配符呢?例如,以下情况会导致我未显式生成的任何jar文件中的类出现NoClassDefFoundError:

java -cp ".;.\ro\nextreports\integration\*.jar" ro.nextreports.integration.
SimpleDemo

假设这是您的目录树:

src/
   ro/
     nextreports/
       integration/
         SimpleDemo.class
从包声明中,编译的类应该位于
integration
子目录中。检查该目录中是否确实存在
SimpleDemo.class
。如果这是正确的,那么它的类路径包含src目录的内容

这意味着,如果没有任何JAR依赖项,可以从
src
目录运行应用程序,如下所示:

java -cp . ro.nextreports.integration.SimpleDemo

您需要使用完全限定的类名

因为您确实有JAR,所以还必须将它们包括在类路径中。假设您在src上方的目录中有一个JAR,在当前目录中有另一个,您可以使用:

java -cp ../one.jar;another.jar;. ro.nextreports.integration.SimpleDemo

如果您从另一个目录运行它,那么如果您查看类路径的相对目录或使用绝对目录来描述类路径,它仍然有效。我不确定,但通常java可执行文件总是将当前目录包含在类路径中。

您需要使用类的完全限定名,即包括其包。请确保在环境变量设置中设置了路径设置和类路径变量。