有没有一种方法可以推广Apache ANT目标?
时间:2020-03-05 18:49:24 来源:igfitidea点击:
我们有一个Apache ANT脚本来构建我们的应用程序,然后将生成的JAR文件检入版本控制(在这种情况下为VSS)。但是,现在有了更改,要求我们为此项目构建2个JAR文件,然后将两者都检入VSS。
将原始JAR文件检入VSS的当前目标通过一些属性发现JAR文件的名称。有没有一种简单的方法可以"通用"此目标,以便我可以重用它以任何名称检入JAR文件?在普通语言中,这显然需要一个函数参数,但据我所知,在ANT中确实没有等效的概念。
解决方案
回答
通常,对二进制文件进行版本控制是一个坏主意,我不建议我们这样做。但是,如果绝对需要,可以将antcall与param结合使用以传递参数并调用目标。
<antcall target="reusable"> <param name="some.variable" value="var1"/> </antcall> <target name="reusable"> <!-- Do something with ${some.variable} --> </target>
我们可以在此处找到有关antcall任务的更多信息。
回答
还请签出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>
回答
看一下Ant宏。它们允许我们为Ant构建定义可重用的"例程"。我们可以在此处找到一个示例(项目15)。
回答
我建议通过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>
重构"蚂蚁之路"
回答
我们可以使用Gant使用groovy编写构建脚本,以执行所需的操作或者查看groovy ant任务。