我想在我的junit测试中通过ant任务启动将codecoverage与jacoco集成在一起。由于我的classpath非常长,叉子崩溃,事实上jacoco迫使我岔开我的junit它给了我一些问题。 我正在使用manifestclasspath将我的类路径添加到jar文件中,将新的jar作为参数发送给虚拟机,但它不工作。我的测试运行,但他们都返回一个ClassNotFoundException。 这里有一个关于我如何配置我的蚂蚁进程的portin。使用Manifestclasspath来运行junit的Ant ClassNotFoundException
<path refid="bin.classpath"/>
bin.classpath包含我需要放在我的.jar文件中的所有路径。
<target name="run-unit-tests" depends="init" description="Runs all the unit tests">
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="jacocoant.jar" />
</taskdef>
<manifestclasspath property="binjar" jarfile="binManifest.jar">
<classpath refid="bin.classpath" />
</manifestclasspath>
<jar destfile="manifestJars/binManifest.jar">
<manifest>
<attribute name="Class-Path" value="${binjar}" />
</manifest>
</jar>
<jacoco:coverage destfile="results/jacoco.exec" xmlns:jacoco="antlib:org.jacoco.ant">
<junit fork="true" reloading="false" showoutput="true">
<classpath>
<pathelement path="${projects.dir}/AntProject/manifestJars/binManifest.jar" />
</classpath>
<batchtest todir="${test.data.dir}" fork="true">
<fileset dir="${projects.dir}/ProjectFolder1/src" />
<fileset dir="${projects.dir}/ProjectFolder2/src" />
</batchtest>
</junit>
</jacoco:coverage>
</target>
如果我看一下控制台日志运行蚂蚁任务,我可以看到我的新.jar文件正在发送时:
-classpath''C:\Users\XXX\Project\AntProject\manifestJars\binManifest.jar;
如果我打开binManifest.jar创建我找到了MANIFEST.MF文件,其所有路径位于Class-Path属性中,格式为:../../Class1/bin ../../Class2/bin ../../ClassN/bin。但由于某些原因,我的所有测试都失败了,因为我的类没有找到。我错过了什么?谢谢。
因为路径是相对的('../../ Class1/bin'),所以猜测可能是工作目录不正确。 – Godin
感谢您的回答@Godin。我也这么想过,但我试过改变我的manifest.mf内容来放绝对路径或改变我的.jar文件到根文件夹。对于第一种情况,测试会以相同的错误崩溃,对于第二种情况,显示的相对路径完全相同 –