2014-02-27 70 views
3

事先道歉 - 我知道有很多很多很多类似的问题,但我想问一些与我的情况相关的问题。尝试从命令行运行时出现NoClassDefFoundError

我有一堆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) 

我试图从一个更高级别的目录同样的事情,但它并没有区别:

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 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文件使用通配符?例如,下面通向NoClassDefFoundError的一类中的任何jar文件我没有作出明确:

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

您需要使用该类的完全限定名称,即。包括其包装。 –

+0

确保在环境变量设置中设置了路径设置和类路径变量。 – Sambhav

回答

1

假设这是你的目录树:

src/ 
    ro/ 
    nextreports/ 
     integration/ 
     SimpleDemo.class 

从你包的声明,您的编译的类应该在integration子目录中。检查该目录中是否有SimpleDemo.class。如果这是正确的,它的类路径将包含src目录的内容。

这意味着,如果你没有任何依赖的JAR,你可以从src目录像这样运行你的应用程序:

java -cp . ro.nextreports.integration.SimpleDemo 

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

既然你有罐子,你也必须将它们包含在classpath中。假设你有上面的src目录one JAR和another在当前目录下,你可以使用:

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

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

相关问题