ANT构建失败并在html报告中给出classNotFoundExceeption



在对" ANT标签是如何工作的?"进行了多次试验和错误之后,我决定为测试用例编写自己的自定义构建xml文件,该文件是用Java编写并与JUnit集成的。不幸的是,我的构建脚本失败与"ClassNotFoundException"。我可以看到日志生成的HTML文件,你可以看到运行ant构建脚本后。

请参见下文

<project name="WebServices integrated with JUnit and generating report with ANT" default="test" basedir="." >
<description> REST Services integration with JUnit </description>

  <!-- set global properties for this build -->
        <property name="project_name" value="junit"/>
        <property name="src" location="src"/>
        <property name="build" location="bin"/>
        <property name="dist" location="dist"/>
        <property name="lib" location="${user.home}/My Documents/Mr/jars"/>
        <property name="reports" location="reports"/>
  <!-- the names of various distributable files. NOTE: Generating distribution file "target" is not used here-->

  <!-- Delete the ${build} and ${dist} directory trees -->
  <target name="clean" description="clean up">
        <delete dir="${build}"/>
        <delete dir="${dist}"/>
        <delete dir="${reports}"/>
  </target>

  <!-- Top level targets -->

  <target name="compile" depends="init" description="compile the source code">
        <javac srcdir="${src}" destdir="${build}">
              <classpath>
                    <fileset dir="${lib}">
                          <include name="**/*.jar"/>
                    </fileset>
              </classpath>
        </javac>
  </target>

  <!-- run your tests -->

  <target name="run-tests" depends="compile" description="run your test suite">
        <junit printsummary="yes" haltonfailure="no" showoutput="yes">
              <classpath>
                    <pathelement path="${build}"/>
                    <fileset dir="${lib}">
                          <include name="**/*.jar"/>
                    </fileset>
              </classpath>

              <batchtest fork="yes" todir="${reports}/raw/">
                    <formatter type="xml"/>
                    <fileset dir="${src}/Test/Services" >
                          <exclude name="MyFile.java"/>
                          <include name="**/*.java"/>  // <------ IMP***: Here I am saying include .java files that are based at "${src}/Test/Services".
                    </fileset>
              </batchtest>
        </junit>
  </target>

  <!-- generate report on tests -->

  <target name="test" depends="run-tests">
        <junitreport todir="${reports}">
              <fileset dir="${reports}/raw/">
                          <include name="TEST-*.xml"/>
              </fileset>

              <report format="frames" todir="${reports}/html/"/>
        </junitreport>
  </target>

  <target name="init" depends="clean" description="initialize the build envrionment">
              <!--create the time stamp -->
              <tstamp/>
              <!-- Create directory structure -->
              <mkdir dir="${build}"/>       //<----dir for class files
              <mkdir dir="${lib}"/>         //<----dir for all my libraries
              <mkdir dir="${dist}/lib"/>    //<----not used
              <mkdir dir="${reports}"/>
              <mkdir dir="${reports}/raw/"/>
              <mkdir dir="${reports}/html/"/>     //<---- it will have output reports 
  </target>

  <target name="all" depends="clean,test">
  </target>

我猜ANT构建将选择所有的源文件(.java),然后它会查找所有基于构建文件夹的类文件,并开始运行它们,但随后我在HTML报告中看到"classNotFoundException"。请查看下面的日志:

CLASS: "getlieninfo"

>   java.lang.ClassNotFoundException: getlieninfo
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)

过了一会儿,我把。java改为。class在"包含"标签的我的目标称为"运行测试"。这样做的原因是,我认为ANT无法在源文件夹(src/Test/Services)中查找"。java"文件,因此我更改为"。class",然后将"fileset"标签中的dir属性值修改为"build",因此它可以很容易地在build文件夹中查找"。class",我将在其中存储编译文件。但我的试验和错误都没有成功,最终得到了相同的"classNotFoundException"。

我不知道哪里出错了,有人能帮帮我吗?

好了,谢谢你们的帮助。我找到问题了。

我必须将include标签属性名称更改为"name=/Test/Services/**/*.java"/>",并将fileset标签中的dir属性更改为"${src}";

<batchtest fork="yes" todir="${reports}/raw/">
      <formatter type="xml"/>
        <fileset dir="${src}" >
             <exclude name="MyFile.java"/>
                <include name="/Test/Services/**/*.java"/>  //<----this where i had to modify.

注意:在src目录下,我有Test/Services文件夹,其中包含源"。java"文件。

        </fileset>
</batchtest>

它解决了我的问题,但后来我不明白为什么ant构建不能识别源文件时,我给dir属性dir="${src}/Test/Services",这是在文件集标签并在include标签中保留name属性,如name="**/*.java"。我的理解是文件集标签应该为给定的目录路径构建路径,一旦路径是构建包括标签将包括或寻找提到的源文件,即。. java。

相关内容

  • 没有找到相关文章

最新更新