2014-10-08 158 views
0

我在执行我的JUNIT类的ant脚本时遇到下面的错误。我的课程编译成功。可能是什么问题?为什么它无法找到类文件?请指导。ClassnotfoundException:在为JUNIT执行Ant脚本时?

CLASSPATH环境变量:

C:\Program Files\Java\jdk1.6.0_34\lib;D:\HR\jboss-5.0.0.GA\lib\endorsed;D:\HR\jboss-5.0.0.GA\lib;D:\HR\jboss-5.0.0.GA\client;D:\HR\apache-ant-1.6.5\lib;C:\Program Files\Java\jdk1.6.0_34\bin 

错误:

junit-report: 
    [delete] Deleting directory D:\MyProject\folder\src\html-report 
    [mkdir] Created dir: D:\MyProject\Test\src\html-report 
    [mkdir] Created dir: D:\MyProject\Test\src\html-report\Junit 
    [junit] Testsuite: test.com.folder.service.ejb.session.SL_ServiceTest 
class 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec 

    [junit]  Caused an ERROR 
    [junit] test.com.folder.service.ejb.session.SL_ServiceTest 
    [junit] java.lang.ClassNotFoundException: test.com.folder.service.ejb.sessio 
.SL_ServiceTest.class 
    [junit]  at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    [junit]  at java.security.AccessController.doPrivileged(Native Method) 
    [junit]  at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    [junit]  at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    [junit]  at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    [junit]  at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    [junit]  at java.lang.Class.forName0(Native Method) 
    [junit]  at java.lang.Class.forName(Class.java:247) 

    [junit] Test test.com.folder.service.ejb.session.SL_ServiceTest 
FAILED 

BUILD SUCCESSFUL 
Total time: 0 seconds 

的build.xml

<project name="MyProject" default="junit-report" basedir="."> 
    <!-- Sets the property variables to point to respective directories --> 
    <property name="junit-xml-dir" value="${basedir}/test-output/junitreports"/> 
    <property name="report-dir" value="${basedir}/html-report" /> 

    <!-- Ant target to generate html report --> 
    <target name="junit-report"> 
    <!-- Delete and recreate the html report directories --> 
    <delete dir="${report-dir}" failonerror="false"/> 
    <mkdir dir="${report-dir}" /> 
    <mkdir dir="${report-dir}/Junit" /> 
    <!-- Ant task to generate the html report. 
    todir - Directory to generate the output reports 

    fileset - Directory to look for the junit xml reports. 

    report - defines the type of format to be generated. 
     Here we are using "noframes" which generates a single html report. 
    --> 
     <junit> 
     <classpath> 
      <pathelement location="./junit-4.8.2.jar"/> 
      <pathelement location="./ant-junit4.jar"/> 
     </classpath> 
     <formatter type="plain" usefile="false" /> <!-- to screen --> 
     <formatter type="plain" /> <!-- to file --> 
     <test name = "test.com.folder.service.ejb.session.SL_ServiceTest" todir="."/> 
    </junit> 
    </target> 
</project> 

回答

0

当Java虚拟机(JVM)尝试加载特定的类并且在类路径中找不到指定的类时,抛出ClassNotFoundExceptionClassNotFoundException是一个检查异常,因此必须在方法或构造函数的throws子句中声明。

如何应对ClassNotFoundException的

1.Verify that the name of the requested class is correct and that the appropriate .jar file exists in your classpath. If not, you must explicitly add it to your application’s classpath.

2.In case the specified .jar file exists in your classpath then, your application’s classpath is getting overriden and you must find the exact classpath used by your application.

3.In case the exception is caused by a third party class, you must identify the class that throws the exception and then, add the missing .jar files in your classpath.

+0

我用我的classpath环境变量更新了我的问题。请让我知道我是否错过了任何东西。 – sTg 2014-10-08 05:09:16

+0

** test.com.folder.service.ejb.sessio .SL_ServiceTest.class **没有被您的JVM找到,我不认为它与任何其他jar相关。 – Imran 2014-10-08 05:12:20

+0

你把你的测试类放在你的junit ant任务的类路径中吗?希望这个链接将有助于http://stackoverflow.com/questions/6984478/junit-test-integrated-with-ant-failed-with-classnotfoundexception – Imran 2014-10-08 05:20:42

1

确保您的项目已经创建的类文件下编译/类项目的目录,并修改您的build.xml喜欢这一点;

<project name="MyProject" default="junit-report" basedir="."> 
    <property name="dir.build" value="build"/> 
    <!-- Do something --> 
    <path id="classpath.project"> 
     <pathelement path="${dir.build}"/> 
    </path> 
    <junit> 
     <classpath refid="classpath.project"/> 
     <pathelement location="./junit-4.8.2.jar"/> 
     <pathelement location="./ant-junit4.jar"/> 
     </classpath> 
     <formatter type="plain" usefile="false" /> <!-- to screen --> 
     <formatter type="plain" /> <!-- to file --> 
     <test name = "test.com.folder.service.ejb.session.SL_ServiceTest" todir="."/> 
    </junit> 

    </project>