2011-09-12 61 views
22

我有一个使用父Ant文件在子文件覆盖目标时,如何调用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中调用测试?

回答

24

最简单的方法是使用父项测试的依赖关系。

为此,请务必将<project>名称属性与其文件名保持同步(确定这不是严格意义上的必要,但会极大地提高脚本的可读性和可维护性)。

所以在集结共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> 

>>在回复评论

如果你想在做父母的测试之前做一些工作,在父母的测试之前创建一个新的目标并且依赖它:

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

这不会让父测试先运行吗?在我的情况下,这将失败,因为瓶子的复制不会发生。我也不想修改父项,因为超过此项目包括父文件。 (我有一个解决方案,至少它看起来像,在下面的答案) – nheid

+0

@ nheid。我提供了一个回答您评论的样本。 –

+0

我喜欢这种方法比明确调用父目标更好!为我工作! –

6

我找到了一个解决方案,它将运行我的命令,然后从父ant文件中调用测试。 覆盖父母的测试,然后在父母测试完成自己的“魔术”后再打电话。

所有其他家长的目标也可以调用。

因此,如果有人不知道你的蚂蚁文件,她可以按照预期的方式调用ant测试。

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

不错,当我无法控制导入的文件,以及没有设置时,我正在寻找解决方案。 – alexandroid