如何包括Ant flaka jar?

时间:2011-10-06 19:10:03

标签: ant flaka

我正在编写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的位置?

2 个答案:

答案 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)使用命名空间声明的现代方式

评论要求命名空间与classpath结合后

编辑 编辑

是的,有效,见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
......等。

for Linux / Unix - 不要忘记ANT_ARGS行上的引号!
...
ANT_ARGS =“ - lib / usr / local / ant_xtralibs:/ usr / local / ant_testlibs”
出口ANT_ARGS
...

您不再需要将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