民间,
在Ant(在Jenkins中)构建我们的Android应用程序时,我们遇到了属性范围问题。这打破了我们的艾玛单元测试覆盖率。
我们使用全局build.xml文件,其中包含以下行:
<target name="clean">
<ant antfile="build.xml" dir="MyProject" target="clean"/>
<ant antfile="build.xml" dir="MyTestProject" target="clean"/>
</target>
<target name="test">
<ant antfile="build.xml" dir="MyTestProject" target="debug"/>
<ant antfile="build.xml" dir="MyTestProject" target="installt"/>
<ant antfile="build.xml" dir="MyTestProject" target="test"/>
</target>
<target name="emma">
<ant antfile="build.xml" dir="MyTestProject" target="emma"/>
</target>
如您所见,它启动了各个项目中的目标。我们使用clean emma test
构建。
在构建过程中,我打印emma.enabled
的值,true
目标设置为emma
。但是,当Ant到达debug
目标时,emma.enabled
不再设置。这会导致我们的测试在没有启用emma覆盖的情况下运行。根据{{3}},属性应保留其值:
默认情况下,当前项目的所有属性都将在新项目中可用。
然而,他们显然没有。我已经有一段时间了,希望你们能帮助我。谢谢!
答案 0 :(得分:0)
在尝试了kbb的建议后,我发现我无法include
来自子项目的build.xml,因为这不会改变工作目录。这导致了各种各样的问题,我需要运行子项目本身的build.xml。
最后,我提出了这个build.xml:
<target name="clean">
<ant antfile="build.xml" dir="${env.label}-${env.omgeving}" target="clean"/>
<ant antfile="build.xml" dir="MijnUnbrandedTest" target="clean"/>
</target>
<target name="test">
<ant antfile="build.xml" dir="MijnUnbrandedTest">
<target name="debug"></target>
<target name="installd"></target>
<target name="test"></target>
</ant>
</target>
<target name="emmatest">
<ant antfile="build.xml" dir="MijnUnbrandedTest">
<target name="emma"></target>
<target name="debug"></target>
<target name="installd"></target>
<target name="test"></target>
</ant>
</target>
target
任务不是使用单个ant
属性,而是允许使用多个target
元素,每个元素都将在相同的Ant任务中运行,因此也可以在范围内运行。来自the Ant task documentation:
您可以使用嵌套元素而不是使用target属性指定多个目标。执行这些操作就好像Ant已使用单个目标调用,该目标的依赖关系是指定的目标,按指定的顺序。