我正在编写ant脚本,并使用Ant flaka jar来做一些工作。
但是flaka不像其他外部Ant库那样工作。
例如,如果我需要包含ant-contrib:
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="../../lib/ant-contrib.jar"/>
</classpath>
</taskdef>最重要的是,我可以指定jar的位置。
但对于flaka,我看不到这样的事情。在官网上,他们只是告诉用户将flaka jar下载到Ant安装文件夹。
当我想要使用flaka jar时,我如何指定它在哪里?
发布于 2011-10-07 04:12:10
首先,一些一般性的建议。任何外部库都必须在ant的视线内,这意味着在path上。
最原始的方法是将ant插件放在$ ant _HOME/lib中,但这会“污染”您的ant安装。
把你的外部库放在它自己的位置,f.e./ant_xtralibs并通过Ant_ARGS使用-lib参数。
在Ant manual中,Flaka manual第2节有一些关于这方面的说明。
处理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扩展了一些蚂蚁任务
但是如果你把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)使用现代的命名空间声明方式
在请求与类路径组合的命名空间的注释后编辑编辑
是的,可以,请参阅Ant manual for details about antlib,特别是
"Load antlib from the buildfile",对于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
::默认
调用ant -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之前加载(f.e.BSF、js、xml)
开始解析构建文件。
ANT_ARGS是一个特殊的环境变量。它的内容会自动添加到Ant的调用中。
--其他可能性--
1)
把那些'set ANT_ARGS ...‘填充到=
Linux/Unix
$ANT_HOME/bin/ant
视窗
%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
发布于 2011-10-07 03:54:14
我刚在不到1分钟的时间里安装了flaka。只需将.jar放入您的..ant/lib目录,如安装说明所示。
运行以下命令:
<project xmlns:c="antlib:it.haefelinger.flaka">
<c:logo>
Hello, #{property['ant.file'].tofile.name}
</c:logo>
</project>正如他们在网站上所说的那样。如果输出结果与以下内容不同:
Buildfile: C:\Users\Stefanos\Documents\Visual Studio 2010\Projects\stackOverflow\stackOverflow\build.xml
[c:logo] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
[c:logo] : Hello, build.xml :
[c:logo] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::检查你的java版本。它必须是>= 1.5。你的ant应该是>= 1.7,最后但同样重要的是检查你的权限。
https://stackoverflow.com/questions/7679224
复制相似问题