首先是一些一般性的建议。任何外部库都必须在 ant 的视线范围内,意味着在路径上。
最原始的方法是将您的 ant 插件放在 $ANT_HOME/lib 中,但这会“污染”您的 ant 安装。
将您的外部库放在它自己的位置,fe /ant_xtralibs 并通过 Ant_ARGS 使用 -lib 参数。
Flaka手册第 2 节对此有一些说明,更多详细信息请参见Ant 手册。
您处理 antcontrib 的示例通过 taskdef 资源使用传统方法。
现代推荐的方法是使用 XML 命名空间声明,正如 Flaka 手册
在第 2 节之前提到的那样:
“因此,显示的所有构建文件片段都假定构建文件包含以下 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)使用现代的命名空间声明方式
在评论要求命名空间与类路径结合后编辑编辑
是的,关于 antlib 的详细信息,请参阅 Ant 手册,尤其是
“从构建文件内部加载 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 脚本,fe:
对于 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
:: 默认
调用 ant -f %1
:: 调试
::call ant -debug -f %1
... 等等。
对于 Linux/Unix - 不要忘记 ANT_ARGS 行上的引号!
...
ANT_ARGS="-lib /usr/local/ant_xtralibs:/usr/local/ant_testlibs"
导出 ANT_ARGS
...
您不再需要将 taskdef 与类路径一起使用!
使用 -lib 选项加载其他库还有另一个好处。
在 Ant(fe BSF、js、xml)开始解析构建文件
之前,必须加载一些库。
ANT_ARGS 是一个特殊的环境变量。它的内容会自动添加到 Ant 的调用中。
-- 其他可能性 --
1)
将那些'set ANT_ARGS ...'的东西放入=
Linux/Unix
$ANT_HOME/bin/ant
Windows
%ANT_HOME%/bin/ant.bat
缺点=更改了ant核心安装,在将ant安装复制到另一台机器之前记住
您的更改
,奇怪的事情发生了!
2)
把你的额外库放在 ${user.home}/.ant/lib
优势=每个用户都可以使用他自己的一组库
有关详细信息,请参阅 Ant 手册:http: //ant.apache.org/manual/running.html#commandline
http://ant.apache.org/manual/running.html#libs