有没有办法推广Apache ANT目标?

时间:2008-09-08 15:08:58

标签: java build-process build-automation ant

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

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

5 个答案:

答案 0 :(得分:46)

我建议使用macros而不是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>

重构,“蚂蚁之路”

答案 1 :(得分:21)

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

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

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

您可以找到有关antcall task here

的更多信息

答案 2 :(得分:5)

看看Ant macros。它们允许您为Ant构建定义可重用的“例程”。您可以找到示例here(第15项)。

答案 3 :(得分:3)

还要检查子任务,它允许您在多个构建文件上调用相同的目标:

<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>

答案 4 :(得分:1)

您可以使用Gant使用groovy为您的构建编写脚本,以执行您想要的操作或查看groovy ant task