2011-12-21 83 views
0

我想在Eclipse中对我的Java源代码编写一些测试。我创建了一个名为/test的新Java源目录。Eclipse无法在我的/ test源文件夹的类路径中找到类

我正在写我的代码的JUnit 4测试。然而,当我跑我的代码,我有时会很奇怪的错误,由于东西从classpath中明显缺少的:

java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester 
    at net.sf.jasperreports.engine.JasperCompileManager.compileReportToStream(JasperCompileManager.java:169) 
    at com.smartsports.sswebserver.service.ReportGeneratorServiceImpl.compile(ReportGeneratorServiceImpl.java:94) 
    at com.smartsports.sswebserver.service.ReportGeneratorServiceImplTestCase.testCompile(ReportGeneratorServiceImplTestCase.java:75) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.digester.Digester 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
    ... 27 more 

一切似乎运行和编译很好,但测试失败的东西,像这一切的时候。我究竟做错了什么?

+0

你的项目是哪种类型? Java项目或插件项目? – Kane 2011-12-21 08:16:27

回答

0

看起来你正在使用Jasper报告,并且由于你的代码直接引用了它,并且Jar文件包含在你的类路径中,所以它编译得很好。但是,Jasper报告似乎取决于Apache Digester的东西,这些东西也需要放在您的类路径中。获取Apache Digester的Jar文件并将其添加到类路径中。

你可能会打这与许多Jar文件为Jasper报表可能取决于很多的东西,所以你可以找到每一个为失败或通过查找贾斯珀找到所有的罐子分发报告,你会可能会找到一个包含所有需要的Jars的目录。

如果你在做插件开发,通常的做法是创建一个包含Jasper报告和所有Jar文件的插件(实际上你可能会发现一个OSGi包(==插件)有这个)。

如果您没有进行插件开发,那么配置您的Java Build Path(选择项目,右键单击并选择Build Path - > Configure Build Path),然后将所需的Jar文件放在Libraries选项卡中,那里有很多选择。

相关问题