Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写子文件中的目标时如何调用ant目标_Ant_Target - Fatal编程技术网

重写子文件中的目标时如何调用ant目标

重写子文件中的目标时如何调用ant目标,ant,target,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

我有一个使用父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的方法

我希望目标也命名为test,这样CI就可以简单地运行测试目标


有没有办法在../build-common-portlet.xml中调用test?

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

为此,保持
名称属性与其文件名同步非常重要(好的,严格来说,这不是必需的,但可以极大地提高脚本的可读性和可维护性)

因此,在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="copy-jars">
    <echo message="copying jars"/>
  </target>

  <target name="test"
    depends="
      copy-jars,
      build-common-portlet.test
    "
  />
</project>

我找到了一个解决方案,它将运行我的命令,然后从父ant文件调用test。 重写父级测试,然后在完成自己的“魔术”后在父级测试时调用

也可以调用所有其他父对象的目标

因此,对于不知道您的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>


这不会让父测试首先运行吗?在我的情况下,这将失败,因为复制jar不会发生。此外,我不想修改父文件,因为此项目包含的父文件不止一个。(我有一个解决方案,至少在下面的回答中看起来是这样的)@nheid。我提供了一个示例来回答您的评论。与显式调用父目标相比,我更喜欢这种方法!为我工作!很好,我正在寻找一个解决方案,当我不能控制导入的文件,当它没有设置。
<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>