我正在编写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时,我如何指定它在哪里?
首先是一些一般性的建议。任何外部库必须在ant的视线范围内,意味着在路径上。
最原始的方法是将ant插件放在$ANT_HOME/lib中,但这会"污染"您的ant安装。
把你的外部库放在它自己的位置,例如/ant_xtralibs,并通过Ant_ARGS使用-lib参数。Flaka手册第2节对此有一些说明,更多细节请参见Ant手册。
你的例子处理antcontrib使用传统的方法通过taskdef resource..现代推荐的方法是使用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] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
注意以"Trying to override.."开头的行。这是因为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手册了解有关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脚本,例如:
为Windows
设置JAVA_HOME = C: java jdk 1.6.0_26
设置ANT_HOME = C: ant
set ANT_ARGS=-lib C:ant_xtralibs;C:ant_testlib
设置路径= % %路径;% JAVA_HOME % bin; % ANT_HOME % bin; C: cvsnt
::默认调用ant -f %1
::调试::调用ant -debug -f %1
…等。
用于Linux/Unix -不要忘记ANT_ARGS行上的引号!
…ANT_ARGS = "自由/usr/local/ant_xtralibs:/usr/地方/ant_testlibs"
出口ANT_ARGS
…
你不需要再用taskdef了!!
使用-lib选项加载其他库还有另一个好处。
有一些库必须在Ant之前加载(例如BSF, js, xml)
开始解析构建文件。
ANT_ARGS是一个特殊的环境变量。它的内容是自动的
—其他可能性—
1)把那些"设置ANT_ARGS……"' stuff into =
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命令行
http://ant.apache.org/manual/running.html填词
我刚刚在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:UsersStefanosDocumentsVisual Studio 2010ProjectsstackOverflowstackOverflowbuild.xml
[c:logo] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
[c:logo] : Hello, build.xml :
[c:logo] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
检查java版本。它必须>= 1.5。您的ant应该>= 1.7,最后但并非最不重要的检查您的权限。