【问题标题】:How to include Ant flaka jar?如何包含 Ant flaka jar?
【发布时间】:2011-10-06 19:10:03
【问题描述】:

我正在编写 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 flaka


    【解决方案1】:

    首先是一些一般性的建议。任何外部库都必须在 ant 的视线范围内,意味着在路径上。
    最原始的方法是将您的 ant 插件放在 $ANT_HOME/lib 中,但这会“污染”您的 ant 安装。
    将您的外部库放在它自己的位置,例如/ant_xtralibs 并通过 Ant_ARGS 使用 -lib 参数。
    Flaka manual 第 2 节对此有一些说明,Ant manual 中有更多详细信息。

    您处理 antcontrib 的示例通过 taskdef 资源使用传统方法..
    现代 - 推荐 - 方法是使用 XML 命名空间声明,正如 Flaka 手册在第 2 节之前提到的那样

    "因此显示的所有构建文件 sn-ps 都假定构建文件包含以下 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) 使用现代的命名空间声明方式

    EDIT在评论要求命名空间与类路径结合后EDIT

    是的,这行得通,请参阅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 脚本,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

    :: 默认
    调用蚂蚁 -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 之前加载(例如 BSF、js、xml)
    开始解析构建文件。

    ANT_ARGS 是一个特殊的环境变量。它的内容是自动 添加到 Ant 的调用中。

    -- 其他可能性--

    1)
    将那些 'set ANT_ARGS ...' 的东西放入 =

    Linux/Unix
    $ANT_HOME/bin/ant

    Windows
    %ANT_HOME%/bin/ant.bat

    缺点 = 更改 ant core 安装,切记
    在将 ant 安装复制到之前所做的更改
    另一台机器和奇怪的事情发生了!

    2)
    把你的额外库放在 ${user.home}/.ant/lib
    优势 = 每个用户都可以使用自己的一组库

    详情请查阅 Ant 手册:
    http://ant.apache.org/manual/running.html#commandline
    http://ant.apache.org/manual/running.html#libs

    【讨论】:

    • 但是是否可以同时定义命名空间和使用特定的类路径?
    【解决方案2】:

    我刚刚在 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,最后但并非最不重要的是检查您的权限。

    【讨论】:

    • 是的,它有效,但请参阅 Flaka 手册第 2.2 节:“最原始的技术是将 ant-flaka-x.y.z.jar 保存到 Ant 的库文件夹 lib 中。”最好保持您的 ant 核心安装干净,并将 ANT_ARGS 用于所有外部库!此外,有时您无权将新内容放入 $ANT_HOME/lib - 有充分的理由 ;-)
    • 好吧,无论如何,当你跟随安装页面时,它应该不是问题。我个人对 flaka 的经验为 0,但我只需按照那里的步骤就可以很容易地运行它。我相信当然有更好、更清洁的方式来使用它。
    • 我的建议——正如 Flaka 手册中所述——并非特定于 Flaka,而是适用于任何外部库;保持 ant core 安装清洁是最佳实践
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多