如何在覆盖子文件中的目标时调用ant目标

时间:2011-09-12 20:36:31

标签: ant target

我有一个使用父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?

2 个答案:

答案 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>