是否可以从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是一个黑客。
答案 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任务来解决此问题。
因此...