gpt4 book ai didi

ant - 如何在 Ant 中动态包含 ant-contrib.jar

转载 作者:行者123 更新时间:2023-12-04 16:35:15 27 4
gpt4 key购买 nike

我正在寻找一种在 Ant 文件中包含 .jar 的方法,以便我可以立即使用它并在我的目标中调用它的方法。
就我而言,它是 ant-contrib-1.0b3.jar .

最佳答案

最好的方法是将 Ant-Contrib jarfile 放在您的项目中。例如,假设 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 命名空间,则需要在 <project> 中放置 XMLNS 声明。标题。这将包含一个 URI,它将您的 Ant Contrib 任务连接到您的 XML namespace 。例如, 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>

这样做的目的是匹配 ac 的 XML 命名空间 (xmlns)带有 URI http://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。

在上述所有三种情况下,我都使用 ac 定义了 XML 命名空间。 .因此,您必须在所有 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>

关于ant - 如何在 Ant 中动态包含 ant-contrib.jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12891893/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com