最好的方法是将 Ant-Contrib jar 文件放入您的项目中。例如,假设build.xml
位于您项目的根目录中。创建一个目录名为ant.lib\ant-contrib
在你的项目中,然后将ant-contrib*.jar
在此文件夹中。您可以将此方法用于您可能需要的其他可选 Ant 任务(例如,Ivy、Findbugs、Cobrrtura 等)。
然后,在你的build.xml
文件,你可以这样做:
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<fileset dir="${basedir}/ant.lib/ant-contrib"/>
</classpath>
</taskdef>
我喜欢这样做,因为带有任务的可选 jar 包含在项目中。如果您将所有内容都检查到版本控制系统中,那么有人可以检查您的代码并进行构建,而无需下载 Ant-Contrib 并自行安装。
您可以定义 XML 命名空间。这为您的 Ant-Contrib 任务提供了一个前缀,以避免在您使用具有相同任务名称的其他可选 ant 任务时发生任务名称冲突。另外,它还提醒用户这不是标准的 Ant 任务。
如果您使用 XML 命名空间,则需要在您的文件中添加 XMLNS 声明<project>
标题。这将包含一个URI它将把您的 Ant Contrib 任务连接到您的 XML 命名空间。例如,ac:
命名空间适用于所有 Ant Contrib 任务:
<project name="my.project" default="package" basedir="."
xmlns:ac="http://ant-contrib.sourceforge.net">
<taskdef resource="net/sf/antcontrib/antlib.xml"
uri="http://ant-contrib.sourceforge.net">
<classpath>
<fileset dir="${basedir}/ant.lib/ant-contrib"/>
</classpath>
</taskdef>
它的作用是匹配 XML 命名空间 (xmlns)ac
与 URIhttp://ant-contrib.sourceforge.net
。 URI 可以是任何内容。例如:
<project name="my.project" default="package" basedir="."
xmlns:ac="hamburger:with-fries">
<taskdef resource="net/sf/antcontrib/antlib.xml"
uri="hamburger:with-fries">
<classpath>
<fileset dir="${basedir}/ant.lib/ant-contrib"/>
</classpath>
</taskdef>
标准是使用类似的东西antlib:net.sf.antcontrib
:
<project name="my.project" default="package" basedir="."
xmlns:ac="antlib:net.sf.antcontrib">
<taskdef resource="net/sf/antcontrib/antlib.xml"
uri="antlib:net.sf.antcontrib">
<classpath>
<fileset dir="${basedir}/ant.lib/ant-contrib"/>
</classpath>
</taskdef>
不过,我喜欢使用项目的 URL。这样,如果有人想要有关 Ant-Contrib 任务的文档,他们就知道 Ant-Contrib 项目所在的 URL。
在上述所有三种情况中,我都使用以下命令定义了 XML 命名空间ac
。因此,您必须在所有 Ant-Contrib 任务名称前添加前缀ac:
。你可以使用antcontrib
或者任何你喜欢的东西。随着ac:
命名空间,您的 Ant-contrib 任务将如下所示:
<ac:if>
<istrue value="${include.debug.code}"/>
<ac:then>
[...]
</ac:then>
<ac:else>
[...]
</ac:else>
<ac:if>
如果您跳过整个命名空间,您可以简单地使用文档中的 Ant-Contrib 任务:
<if>
<istrue value="${include.debug.code}"/>
<then>
[...]
</then>
<else>
[...]
</else>