Доступ к ресурсам Antlib из макросов Apache Ant - PullRequest
2 голосов
/ 01 марта 2011

Возможно ли получить доступ к ресурсам из макросов Apache Ant, определенных в Antlib?

Например, в моем antlib.xml у меня есть макрос, который выполняет некоторый XSLT.В идеале я хотел бы, чтобы файл XSLT был упакован в тот же JAR-файл, что и antlib.xml, но я не знаю, как указать местоположение 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, относится к basedir для проекта, использующего antlib, и я не могу найти способ указать путь относительно antlib.xml.

Есть идеи?

Я могу отправить XSLT в виде отдельного файла, но тогда мне нужно будет дать пользователям какой-то способ указать местоположение XSLT, что не идеально (например, установить свойство tibant.home).Я мог бы также использовать echoxml, чтобы записать XSLT во временный файл, но IMO - это взлом.

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Вместо использования атрибута style попробуйте вложенный элемент <style>, который позволит вам указать javaresource в качестве таблицы стилей. Затем вы можете поместить таблицу стилей рядом с вашим antlib.xml в банку, и она будет доступна на пути к классам.

<xslt in="@{xml}"
    out="@{out}">
    <style>
        <javaresource name="your/package/structure/style.xslt" />
    </style>
</xslt>
1 голос
/ 02 марта 2011

Первое, на что я хотел бы обратить внимание, это загрузить 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. Запишите текст XSLT во временный файл, используя задачу Echo.
  4. Вызов XSLT со ссылкой на временный файл.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...