我有一个问题,如果你能帮助我,我会很感激的。因此,我使用JUnit为ant创建了build.xml文件,在Windows操作系统上一切正常。但是如果我在Mac OS上复制/粘贴build.xml到相同的java项目中,它甚至不能构建或不运行测试。
这是我的build.xml(我在build.xml中为在Mac上运行而更改的内容以注释和粗体表示):
<project name="Brojevi" default="jar" basedir="."
xmlns:jacoco="antlib:org.jacoco.ant">
<description>
Build datoteka za projekt Brojevi.
</description>
<property name="src" location="src"/>
<property name="src.java" location="${src}/main/java"/>
<property name="src.test" location="${src}/test/java"/>
<property name="build" location="build"/>
<property name="build.classes" location="${build}/classes"/>
<property name="build.test" location="${build}/test"/>
<property name="dist" location="dist"/>
<property name="junit.home" value="d:/usr/junit-4.11" /> <!--changed path -->
<property name="jacoco.home" value="d:/usr/jacoco-0.6.3" /> <!--changed path -->
<taskdef uri="antlib:org.jacoco.ant"
resource="org/jacoco/ant/antlib.xml">
<classpath path="${jacoco.home}/lib/jacocoant.jar"/>
</taskdef>
<path id="compile.path">
<pathelement location="${build.classes}"/>
</path>
<path id="test.path">
<path refid="compile.path"/>
<pathelement location="${build.test}"/>
<fileset dir="${junit.home}">
<include name="**/*.jar"/> <!--changed path -->
</fileset>
</path>
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
<mkdir dir="${dist}"/>
</target>
<target name="compile" depends="init"
description="Prevođenje izvornog koda">
<mkdir dir="${build.classes}"/>
<javac srcdir="${src.java}" destdir="${build.classes}"
classpathref="compile.path" <!--changed to "test.path" -->
encoding="UTF-8" debug="on"
debuglevel="lines,vars,source"
includeAntRuntime="false" />
</target>
<target name="compile-tests" depends="compile"
description="Prevođenje izvornog koda testova">
<mkdir dir="${build.test}"/>
<javac srcdir="${src.test}" destdir="${build.test}"
classpathref="test.path"
encoding="UTF-8" debug="on"
debuglevel="lines,vars,source"
includeAntRuntime="false" />
</target>
<target name="run-tests" depends="compile-tests"
description="Izvođenje definiranih testova" >
<mkdir dir="${dist}/test-reports/xml"/>
<mkdir dir="${dist}/test-reports/html"/>
<mkdir dir="${dist}/test-reports/coverage"/>
<jacoco:coverage
destfile="${dist}/test-reports/xml/jacoco.exec">
<junit printsummary="yes" haltonfailure="yes"
fork="true" forkmode="once">
<classpath refid="test.path" />
<formatter type="plain"/>
<formatter type="xml"/>
<batchtest fork="yes" todir="${dist}/test-reports/xml">
<fileset dir="${src.test}">
<include name="**/*Test*.java"/>
</fileset>
</batchtest>
</junit>
</jacoco:coverage>
<junitreport todir="${dist}/test-reports/xml">
<fileset dir="${dist}/test-reports/xml">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${dist}/test-reports/html"/>
</junitreport>
<jacoco:report>
<executiondata>
<file file="${dist}/test-reports/xml/jacoco.exec"/>
</executiondata>
<structure name="${ant.project.name}">
<classfiles>
<fileset dir="${build.classes}"/>
<fileset dir="${build.test}"/>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${src.java}"/>
<fileset dir="${src.test}"/>
</sourcefiles>
</structure>
<html destdir="${dist}/test-reports/coverage"/>
</jacoco:report>
</target>
<target name="clean"
description="Brisanje generiranog sadržaja" >
<delete dir="${build}" failonerror="false" />
<delete dir="${dist}" failonerror="false" />
</target>
</project>
我不明白的是,如果我不改变classpathref从"编译。路径"to"test。path"(我在注释中添加的第四件也是最后一件事),然后我收到了BUILD FAILED的消息,并且包org。Junit不存在。所以如果我输入test。路径",我得到消息BUILD成功,但没有一个测试完成(由JUnit生成的index.html说没有测试完成,而且由JUnit生成的xml文件是空的)。我要做什么改变才能让它起作用?谢谢你的帮助
编辑终于解决了在5天的寻找错误。当然是愚蠢的。我的测试文件与源代码在同一目录中,而不是在测试目录中。谢谢大家的帮助,不好意思打扰了。
(这可能是一个注释,但我需要一些格式)
带- debug
选项运行ant。将输出重定向到文件。然后查找包含'dropping'
字符串的消息。这表明路径有问题,ant忽略了某些jar,因为它们没有找到。
其次避免路径硬编码。如果需要,您可以从环境变量获取值或传入命令行属性。例如:-Djunit.home=/my/new/path