从Apache Ant宏中访问Antlib资源

时间:2011-03-01 20:20:40

标签: ant jar

是否可以从Antlib中定义的Apache Ant宏中访问资源?

例如,在我的antlib.xml中,我有一个执行某些XSLT的宏。理想情况下,我希望将XSLT文件打包在与antlib.xml相同的JAR中,但我不知道如何指定XSLT的位置。

这是(简化)代码:

<antlib xmlns:tibant="antlib:org.windyroad.tibant">
    <macrodef name="configure-ear">
        <attribute name="xml" />
        <attribute name="out" />
        <sequential>
            <xslt in="@{xml}"
                  out="@{out}"
                  style="...what to put here...">
            </xslt>
        </sequential>
    </macrodef>
</antlib>

问题在于,我在style属性中放置的内容与使用antlib的项目的basedir相关,我找不到任何方法来指定相对于antlib的路径。 XML。

有什么想法吗?

我可以将XSLT作为单独的文件发布,但是我需要给用户一些方法来指定XSLT的位置,这是不理想的(例如设置tibant.home属性)。我也可以使用echoxml将XSLT写入临时文件,但IMO是一个黑客。

2 个答案:

答案 0 :(得分:2)

尝试嵌套的style元素,而不是使用<style>属性,这样您就可以指定javaresource作为样式表。然后,您可以将样式表放在jar中的antlib.xml旁边,它将在类路径中可用。

<xslt in="@{xml}"
    out="@{out}">
    <style>
        <javaresource name="your/package/structure/style.xslt" />
    </style>
</xslt>

答案 1 :(得分:1)

我要看的第一件事是从类加载器加载XSL作为资源。您应该能够使用LoadResource任务(http://ant.apache.org/manual/Tasks/loadresource.html)完成此任务。接下来我将看看XSLT任务为您指定样式提供的选项。看起来它没有能力获取XSLT的文字内容。您可以通过将XSLT内容写出到临时文件然后将临时文件的路径提供给XSLT任务来解决此问题。

因此...

  1. 从类加载器加载XSLT文本。
  2. 使用Tempfile任务获取临时文件(http://ant.apache.org/manual/Tasks/tempfile.html)。
  3. 使用Echo任务将XSLT文本写入临时文件。
  4. 参考临时文件调用XSLT。