gpt4 book ai didi

java - ANT 构建失败并在 html 报告中给出 classNotFoundException

转载 作者:行者123 更新时间:2023-12-01 04:41:17 25 4
gpt4 key购买 nike

在“ANT 标签如何工作?”上进行了如此多的试验和错误之后,我决定为用 Java 编写并与 JUnit 集成的测试用例编写自己的自定义构建 xml 文件。不幸的是,我的构建脚本因“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 build 将选择所有源文件 (.java),然后它将查找基于 build 文件夹的所有类文件并开始运行它们,但随后我在 HTML 报告中看到“classNotFoundException”。请参阅下面的日志:

类别:“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)

过了一会儿,我在名为“run-tests”的目标的“include”标签中将 .java 更改为 .class 。这样做的原因是,我认为 ANT 无法查找源文件夹(src/Test/Services)中的“.java”文件,因此我更改为“.class”,然后将“fileset”标记中的 dir 属性值修改为“build”,这样它就可以轻松地在 BUILD 文件夹中查找“.class”,我将在其中存储编译文件。但我的尝试和错误都没有成功,并以相同的“classNotFoundException”结束。

I am not sure what went wrong , can someone help me, please?

最佳答案

好的,伙计们,感谢你们为我提供的一点帮助。我发现了问题。

I had to change include tag attribute name to "name=/Test/Services/**/*.java"/>" and modify dir attribute in fileset tag to "${src}" ; see below :

<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>

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

关于java - ANT 构建失败并在 html 报告中给出 classNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16475076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com