首先是一些一般性的建议。任何外部库都必须在 ant 的视线范围内,意味着在路径上。
最原始的方法是将您的 ant 插件放在 $ANT_HOME/lib 中,但这会“污染”您的 ant 安装。
将您的外部库放在它自己的位置,例如/ant_xtralibs 并通过 Ant_ARGS 使用 -lib 参数。
Flaka manual 第 2 节对此有一些说明,Ant manual 中有更多详细信息。
您处理 antcontrib 的示例通过 taskdef 资源使用传统方法..
现代 - 推荐 - 方法是使用 XML 命名空间声明,正如 Flaka 手册在第 2 节之前提到的那样
:
"因此显示的所有构建文件 sn-ps 都假定构建文件包含以下 XML 命名空间声明"
也可以通过 taskdef 以传统方式使用 Flaka:
<project>
<taskdef resource="it/haefelinger/flaka/antlib.xml">
<classpath>
<pathelement location="/home/rosebud/flaka/ant-flaka-1.02.02.jar"/>
</classpath>
</taskdef>
<!-- when on path via -lib or ANT_ARGS it's enough to use : -->
<taskdef resource="it/haefelinger/flaka/antlib.xml"/>
<logo>
Hello, #{property['ant.file'].tofile.name}
</logo>
</project>
输出
Trying to override old definition of datatype filterset
Trying to override old definition of task fail
Trying to override old definition of task echo
[logo] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
[logo] : Hello, demo.xml :
[logo] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
注意以“尝试覆盖..”开头的行
那是因为 Flaka 扩展了一些 ant 任务
但如果你将 Flaka 放在它自己的命名空间中:
<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka">
<fl:logo>
Hello, #{property['ant.file'].tofile.name}
</fl:logo>
</project>
输出
[fl:logo] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
[fl:logo] : Hello, demo.xml :
[fl:logo] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
不再“试图覆盖...”意味着不再与 ant 自己的任务发生冲突,因为 Flaka 驻留在它自己的命名空间中
所以简而言之:
1) 使用 ANT_ARGS 将您的额外库(Flaka .. 等)带入游戏
2) 使用现代的命名空间声明方式
EDIT在评论要求命名空间与类路径结合后EDIT
是的,这行得通,请参阅Ant manual for details about antlib,尤其是
部分
“从构建文件内部加载 antlib”,对于 Flaka,您可以使用类似:
<project xmlns:fl="antlib:it.haefelinger.flaka">
<taskdef uri="antlib:it.haefelinger.flaka"
resource="it/haefelinger/flaka/antlib.xml"
classpath="path/to/flaka.jar"/>
但我相信你仍然没有得到使用 $ANT_ARGS 的好处
只需使用一些脚本来启动你的 ant 脚本,f.e. :
适用于 Windows
设置 JAVA_HOME=C:\java\jdk\1.6.0_26
设置 ANT_HOME=C:\ant
设置 ANT_ARGS=-lib C:\ant_xtralibs;C:\ant_testlibs
设置 PATH=%PATH%;%JAVA_HOME%\bin;%ANT_HOME%\bin;C:\cvsnt
:: 默认
调用蚂蚁 -f %1
:: 调试
::调用 ant -debug -f %1
...等
对于 Linux/Unix - 不要忘记 ANT_ARGS 行上的引号!
...
ANT_ARGS="-lib /usr/local/ant_xtralibs:/usr/local/ant_testlibs"
出口 ANT_ARGS
...
您不再需要将 taskdef 与类路径一起使用!!
使用 -lib 选项加载其他库还有另一个好处。
有些库必须在 Ant 之前加载(例如 BSF、js、xml)
开始解析构建文件。
ANT_ARGS 是一个特殊的环境变量。它的内容是自动
添加到 Ant 的调用中。
-- 其他可能性--
1)
将那些 'set ANT_ARGS ...' 的东西放入 =
Linux/Unix
$ANT_HOME/bin/ant
Windows
%ANT_HOME%/bin/ant.bat
缺点 = 更改 ant core 安装,切记
在将 ant 安装复制到之前所做的更改
另一台机器和奇怪的事情发生了!
2)
把你的额外库放在 ${user.home}/.ant/lib
优势 = 每个用户都可以使用自己的一组库
详情请查阅 Ant 手册:
http://ant.apache.org/manual/running.html#commandline
http://ant.apache.org/manual/running.html#libs