ClassNotFoundException - 运行 ant-junit 时 [英] ClassNotFoundException - when running ant-junit

查看:23
本文介绍了ClassNotFoundException - 运行 ant-junit 时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为实际应用程序创建概念证明,任务是运行 ant-junit 测试而不向全局环境添加内容.到目前为止,我已经在 ant 中实现了它,但是,我遇到了以下异常.ClassTest.java 是具有示例单元测试用例的 java 类.(Junit 3.0 风格).我不知道为什么 ant-junit 没有找到这个类,尽管在批处理任务中提到了路径.

I'm trying to create a Proof of concept for the actual application, The task is to run ant-junit tests without adding stuff to the global environment. I've achieved it so far in ant, but, I'm stuck with the following exception. ClassTest.java is the java class that has sample unit testcase. (Junit 3.0 style). I'm not sure why ant-junit does not find the class inspite of mentioning the paths in the batchrun task.

项目结构

运行 ant-junit 任务时出现以下异常.

I get the following exception when running ant-junit task.

Testsuite: ClassTest
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec

    Caused an ERROR
ClassTest
java.lang.ClassNotFoundException: ClassTest
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:249)
    at org.eclipse.ant.internal.launching.remote.EclipseSingleCheckExecutor.executeTargets(EclipseSingleCheckExecutor.java:30)
    at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
    at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
    at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)

我的 ant build.xml 文件是

My ant build.xml file is

<project name="Java project build" default="build">
<property name="project.local.directory" value="C:\Users\usrpao\workspace\Ant" />
<property name="src.path" value="${project.local.directory}/src" />
<property name="lib.path" value="${project.local.directory}/lib" />
<property name="dest.path" value="${project.local.directory}/target" />
<property name="junit.output.dir" value="${project.local.directory}/junit" />

<path id="classpath.test">
    <fileset dir="lib">
        <include name="**/*.jar" />
    </fileset>
</path>

<!--<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
    <classpath refid="classpath.test" />
</taskdef> -->

<path id="MyProject.classpath">
    <pathelement location="lib/ant-junit.jar" />
    <pathelement location="lib/junit.jar" />
        <pathelement location="bin/*.*"/>
</path>

<path id="lib.classpath">
    <pathelement location="lib/ant-junit.jar" />
    <pathelement location="lib/junit.jar" />
</path>

<target name="build" depends="clean">
    <javac srcdir="${src.path}" destdir="${dest.path}" classpathref="lib.classpath">
    </javac>
    <antcall target="test">
    </antcall>
</target>

<target name="clean">

</target>

<target name="test">
    <pathconvert property="testoutput" refid="classpath.test" />
    <echo>Path = ${testoutput}</echo>
    <mkdir dir="${junit.output.dir}" />
    <junit haltonerror="false" showoutput="true">

        <classpath refid="MyProject.classpath">
        </classpath>
        <batchtest todir="${junit.output.dir}">
            <formatter type="plain" />
            <fileset dir="${src.path}/com/ant/test">
                <include name="**/*Test*.java" />
            </fileset>
        </batchtest>

    </junit>
</target>

推荐答案

您的类路径引用了 bin 目录,而这些类实际上位于 target 目录下.您应该更改 MyProject.classpath 引用以包含 ${project.local.directory}/target:

Your classpath is referencing the bin directory while the classes are actually under the target directory. You should change the MyProject.classpath reference to include ${project.local.directory}/target:

<path id="MyProject.classpath">
   <pathelement location="lib/ant-junit.jar" />
   <pathelement location="lib/junit.jar" />
   <dirset dir="${project.local.directory}">
        <include name="target"/>
    </dirset>
</path>

另外,你应该改变junit任务里面的fileset元素,把测试类的包名对应的文件夹去掉,否则还是会得到一个ClassNotFoundException:

In addition, you should change the fileset element inside the junit task by removing the folders corresponding to the package name of the test class, otherwise you will still get a ClassNotFoundException:

<junit haltonerror="false" showoutput="true">

    <classpath refid="MyProject.classpath">
    </classpath>
    <batchtest todir="${junit.output.dir}">
        <formatter type="plain" />
        <fileset dir="${src.path}">  <!-- remove com/ant/test corresponding to package name -->
            <include name="**/*Test*.java" />
        </fileset>
    </batchtest>

</junit>

这篇关于ClassNotFoundException - 运行 ant-junit 时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆