我正在编写ant脚本并使用Ant flaka jar来做一些工作。
但是flaka不像其他外部Ant lib那样工作。
例如,如果我需要包含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的位置?
答案 0 :(得分:0)
我刚刚在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。你的蚂蚁应该是&gt; = 1.7并且最后但并非最不重要的是检查你的权限。
答案 1 :(得分:0)
首先是一些一般性建议。任何外部的lib都必须在蚂蚁中看到,路径上的意思
最原始的方法是将你的蚂蚁插件放在$ ANT_HOME / lib中,但是“污染”你的蚂蚁安装。
把你的外部库放在它自己的位置,例如。 / ant_xtralibs并通过Ant_ARGS使用-lib参数
Flaka manual第2部分有关于此的一些注释,Ant manual中的更多详情。
你处理antcontrib的例子使用了taskdef资源的传统方法。
现代推荐的方法是使用XML命名空间声明,正如Flaka Manual提到的那样,在第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] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
不再“试图覆盖......”意味着不再与蚂蚁自己的任务发生冲突,因为Flaka驻留在它自己的命名空间中
所以要简短:
1)使用ANT_ARGS将你的extralib(Flaka ......等)带入游戏中
2)使用命名空间声明的现代方式
编辑 编辑
是的,有效,见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脚本,例如。 :
for 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
:: debug
:: call ant -debug -f%1
......等。
您不再需要将taskdef与classpath一起使用!!
使用-lib选项加载其他库还有另一个好处
在Ant之前必须加载一些lib(f.e.BSF,js,xml)
开始解析构建文件。
ANT_ARGS是一个特殊的环境变量。它的内容是自动的 添加到Ant的调用。
- 其他可能性 -
1)
把那些'set ANT_ARGS ...'的东西放进=
的Linux / Unix
$ ANT_HOME / bin中/蚂蚁
视窗
%ANT_HOME%/ bin中/ ant.bat
缺点=更改蚂蚁核心安装,记住
在将ant安装复制到
之前的更改
另一台机器和奇怪的事情发生了!
2)
将你的extralib放在$ {user.home} /.ant / lib
中
优点=每个用户都可以使用自己的一组库
详情请参阅Ant手册:
http://ant.apache.org/manual/running.html#commandline
http://ant.apache.org/manual/running.html#libs