【问题标题】:Nested Imports in AntAnt 中的嵌套导入
【发布时间】:2011-02-07 14:43:08
【问题描述】:

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

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 构建文件中,并让它正确构建。现在唯一的问题是,如果我取消注释上面的 XML 以定义自己的构建步骤,它会被导入覆盖并被忽略。所以它最终变成了 [build, common.build] 而不是 [build, mid.build]。

【问题讨论】:

    标签: ant import


    【解决方案1】:

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

    <project name="mid" default="build">
      <include file="common.xml" />
    </project>
    

    “包含”和“导入”任务具有替代任务覆盖的方法。请参阅include task docs 中的' 有何不同?'

    简短版本:如果您使用 import 打算覆盖目标,否则 使用包含

    听起来您希望选择通用的“构建”目标,除非它在中间定义。问题在于,通过“导入”任务,读入(即 common.xml)版本将覆盖 mid.xml 中的版本。因为 'include' 不允许覆盖,所以在读取 common.xml 时不会覆盖调用者 (mid.xml) 中定义的那个。

    示例:对于上面的 mid.xml,ant -f top.xml 报告:

    build:
    
    mid.build:
         [echo] build common
    

    在 mid.xml 中使用 build 目标覆盖:

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

    结果变成:

    build:
    
    mid.build:
         [echo] build mid
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 2016-09-06
      相关资源
      最近更新 更多