我有一个使用父ant文件的项目
与此类似:
<project name="some-portlet" basedir="." default="deploy">
<import file="../build-common-portlet.xml" />
<target name="test">
<echo message="do foo"/>
RUN TEST FROM PARENT HERE
</target>
</project>
现在我想以这种方式覆盖父测试目标:
第一部分没问题,但我没有看到从父文件调用测试的方法
我希望目标也被命名为test,这样CI就可以简单地运行测试目标。
有没有办法在../build-common-portlet.xml中调用test?
答案 0 :(得分:26)
最简单的方法是使用对父级测试的依赖。
为此,保持<project>
名称属性与其文件名同步非常重要(确定,严格来说,这不是必需的,但可以大大提高脚本的可读性和可维护性)。
所以在build-common-portlet.xml中:
<project
name="build-common-portlet" <-- note the name
...
>
<target name="test">
<echo message="Calling parent test target"/>
...
</target>
</project>
你可以这样做:
<project name="some-portlet" basedir="." default="deploy">
<import file="../build-common-portlet.xml" />
<target name="test"
depends="build-common-portlet.test" <-- note parent specification
>
<echo message="do foo"/>
RUN TEST FROM PARENT HERE
</target>
</project>
<强>&GT;&GT;回复评论
如果你想在运行父测试之前做一些工作,只需创建一个新目标并在父测试之前对它进行依赖:
<project name="some-portlet" basedir="." default="deploy">
<import file="../build-common-portlet.xml" />
<target name="copy-jars">
<echo message="copying jars"/>
</target>
<target name="test"
depends="
copy-jars,
build-common-portlet.test
"
/>
</project>
答案 1 :(得分:6)
我找到了一个解决方案,它将运行我的命令,然后从父ant文件中调用test。 覆盖父母的测试,然后在完成自己的“魔法”后,在父母的测试时调用。
也可以调用所有其他父母的目标。
因此,对于不知道你的蚂蚁文件的人,她可以按照预期的方式调用蚂蚁测试。
<project name="some-portlet" basedir="." default="deploy">
<import file="../build-common-portlet.xml" />
<target name="test">
<echo message="do foo"/>
<ant antfile="../build-common-portlet.xml" target="test"/>
</target>
</project>