我们有一个 Apache ANT 脚本来构建我们的应用程序,然后将生成的 JAR 文件签入版本控制(在本例中为 VSS)。然而,现在我们进行了一项更改,要求我们为此项目构建 2 个 JAR 文件,然后将这两个文件签入 VSS。

将原始 JAR 文件签入 VSS 的当前目标通过某些属性发现 JAR 文件的名称。有没有一种简单的方法来“概括”这个目标,以便我可以重用它来签入具有任何名称的 JAR 文件?在普通语言中,这显然需要一个函数参数,但据我所知,ANT 中确实没有等效的概念。

有帮助吗?

解决方案

我建议与 优于 subant/antcall 因为我发现宏的主要优点是您可以完全控制传递给宏的属性(特别是如果您想添加新属性)。

您只需从目标开始重构 Ant 脚本即可:

<target name="vss.check">
    <vssadd localpath="D:\build\build.00012.zip" 
        comment="Added by automatic build"/>
</target>

创建宏(注意复制/粘贴并替换为@{file}):

<macrodef name="private-vssadd">
    <attribute name="file"/>
    <sequential>
        <vssadd localpath="@{file}" 
            comment="Added by automatic build"/>
    </sequential>
</macrodef>

并用您的文件调用宏:

<target name="vss.check">
    <private-vssadd file="D:\build\File1.zip"/>
    <private-vssadd file="D:\build\File2.zip"/>
</target>

重构,“蚂蚁方式”

其他提示

通常认为对二进制文件进行版本控制是一个坏主意,我不建议这样做。但如果你绝对需要,你可以使用 antcall 结合 param 来传递参数并调用目标。

<antcall target="reusable">
    <param name="some.variable" value="var1"/>
</antcall>

<target name="reusable">
    <!-- Do something with ${some.variable} -->
</target>

您可以找到有关的更多信息 antcall 任务在这里.

看看蚂蚁 . 。它们允许您为 Ant 构建定义可重用的“例程”。你可以找个例子 这里 (第 15 项)。

另请查看 subant 任务,它允许您在多个构建文件上调用同一目标:

<project name="subant" default="subant1">
    <property name="build.dir" value="subant.build"/>
    <target name="subant1">
        <subant target="">
            <property name="build.dir" value="subant1.build"/>
            <property name="not.overloaded" value="not.overloaded"/>
            <fileset dir="." includes="*/build.xml"/>
        </subant>
    </target>
</project>

您可以使用 甘特 编写您的构建脚本 时髦的 做你想做的事或看看 绝妙的蚂蚁任务.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top