【发布时间】: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]。
【问题讨论】: