Ant中的嵌套导入

Ant中的嵌套导入,ant,import,Ant,Import,我有一个构建系统,其中许多组件是完全相同的,所以我一直在更改它,以便在大多数构建任务的公共文件上使用“导入”。然后构建系统还需要构建它所依赖的任何模块。所以我大概 common.xml project1.xml - import common.xml project2.xml - include project1.xml - import common.xml common.xml中有一个名为“build”的目标。我希望project2能够包括project1,并使用扩展点在构建目

我有一个构建系统,其中许多组件是完全相同的,所以我一直在更改它,以便在大多数构建任务的公共文件上使用“导入”。然后构建系统还需要构建它所依赖的任何模块。所以我大概

common.xml
project1.xml
  - import common.xml
project2.xml
  - include project1.xml
  - import common.xml
common.xml中有一个名为“build”的目标。我希望project2能够包括project1,并使用扩展点在构建目标上放置依赖项。但由于某些原因,它没有认识到project1有一个构建目标。如果我将其更改为依赖于project1.xml中定义的目标,那么就可以了。但是我需要能够在common.xml中指定一个目标

有什么办法可以这样做吗

没有任何过失。这个项目曾经使用过它,但我正试图摆脱它,这样我们就不会有可怕的、程序化的构建系统代码。这个项目有很多看起来像钻石的依赖关系,一个合适的依赖关系图(ant自动生成的图)将非常有帮助

所以我创建了几个简单的文件来说明我的问题

<project name="top" default="build">
  <include file="mid.xml" as="mid" />
  <target name="build">
    <antcall target="mid.build" />
  </target>
</project>

<project name="mid" default="build">
  <!-- <target name="build"> -->
  <!--   <echo message="build mid" /> -->
  <!-- </target> -->
  <import file="common.xml" />
</project>

<project name="common">
  <target name="build">
    <echo message="build common" />
  </target>
</project>

这是失败的。top.xml找不到mid.build。当我运行ant-p列出目标时,它显示build和common.build。因此,我尝试添加到mid.xml构建文件中,并使其正确构建。现在唯一的问题是,如果我为mid取消注释上面的XML以定义它自己的构建步骤,它会被导入覆盖并被忽略。因此它最终变成了[build,common.build]而不是[build,mid.build]。

请尝试改用,尤其是在
mid.xml
级别:

<project name="mid" default="build">
  <include file="common.xml" />
</project>
使用mid.xml中的
构建
目标覆盖:

<project default="build" name="mid">
  <target name="build">
    <echo message="build mid" />
  </target>
  <include file="common.xml" />
</project>
<project default="build" name="mid">
  <target name="build">
    <echo message="build mid" />
  </target>
  <include file="common.xml" />
</project>
build:

mid.build:
     [echo] build mid