Можно ли отобразить вызов "граф" точки расширения муравья? - PullRequest
4 голосов
/ 02 августа 2011

У меня есть точка расширения, определенная в ant:

<extension-point name="foo"/>

Многие задачи вносят вклад в эту точку в нескольких импортированных файлах ant:

<bindtargets targets="bar" extensionPoint="foo" />

Однако я вродепотеряно относительно того, какие именно задачи способствуют.Есть ли способ заставить муравей сообщать о задачах, которые могут быть вызваны заданной точкой расширения?В более общем смысле, есть ли способ отобразить «граф вызовов» (или просто список зависимостей) задачи муравья?

Я попытался использовать подробные параметры для ant (-v и тому подобное), но безуспешно.

Спасибо

Ответы [ 3 ]

0 голосов
/ 11 мая 2015

Я знаю 2 способа получить эту информацию:

  1. Вы можете получить эффективную последовательность вызовов целевых / расширенных точек из консольного регистратора Ant. Для этого переведите средство ведения журнала Ant в подробный режим, передав в командной строке -verbose Ant. Есть две строки, одна за другой, которые выводят на консоль непосредственно перед большинством целей, когда они вызываются в вашем скрипте сборки:

    • Строка, которая показывает сводку целей в последовательности вызовов, начиная с текста, Build sequence for target(s) 'artifact' is [...].
    • Строка, показывающая подробную последовательность вызовов (вложенные цели и antcalls включены). Эта строка начинается с текста Complete build sequence is [...]. В этом листинге рассматривается, насколько это возможно, оценка любых атрибутов if и unless каждой цели, перечисленных в точке, в которой линия записывается на консоль.

    Просто вызовите сборку Ant, как обычно, с опцией -verbose, и ваша консоль должна иметь информацию, которую вы ищете.

  2. Вы можете получить графическое представление последовательности вызовов, используя инструмент под названием Grand . Тем не менее, он не обновлялся в течение достаточно долгого времени и, следовательно, не поддерживает точки расширения (что вас здесь интересует). Он будет интерпретировать antcall's, ant и depend'encies. Он не оценивает атрибуты if и unless, а просто определяет потенциальную последовательность выполнения - скорее иерархию зависимостей, чем реальный граф вызовов. Проект находится на Github, поэтому обновление для поддержки точек расширения может быть не слишком сложным.

    Изображение отображается с использованием Graphviz .

Для фактической последовательности вызовов используйте опцию 1.

0 голосов
/ 11 декабря 2015

Это довольно небрежно, но работает.Ant на самом деле довольно легко написан на скрипте, и если вы используете хотя бы Java 6 (или это может быть Java 7), встроенная поддержка javascript и, следовательно, может использоваться прямо из коробки.Это определяет задачу, которая будет отображать зависимости любой цели в порядке вызова:

<scriptdef name="listdepends" language="javascript">
    <attribute name="target"/>
    <![CDATA[
        var done = [];
        var echo = project.createTask("echo")
        function listdepend(t) {
            done.push(t.getName());
            var depends = t.getDependencies();
            while (depends.hasMoreElements()) {
                var t2 = depends.nextElement();
                if (done.indexOf(t2)==-1) listdepend(project.getTargets().get(t2));
            }
            echo.setMessage(t.getName());
            echo.perform();             
        }
        var t = attributes.get("target");
        if (t!=null) {
            var targ = project.getTargets().get(t);
            listdepend(targ);
        }
    ]]>
</scriptdef>

В вашем случае вы можете создать новую цель (или нет) и вызывать ее так:

    <target name="listfoo">
        <listdepends target="foo"/>
    </target>

Как я уже сказал, это несколько небрежно.Это, вероятно, не очень быстро (хотя, если ваша цель не вызывает тысячи других, это, вероятно, не заметно медленно).Он не будет обрабатывать задачи antcall (хотя его можно было бы легко изменить) или отвечать на атрибуты if и else.Если зависимости вкладываются слишком далеко, он может достигнуть предела глубины рекурсии (но я сомневаюсь, что любой проект вложит их достаточно глубоко).

Массив используется для того, чтобы убедиться, что каждая зависимость указана один раз (ant будет запускать их толькоодин раз).

0 голосов
/ 23 августа 2011

Прежде всего, вы можете попытаться отладить процесс ANT в вашей IDE, используя удаленную отладку, добавив некоторые параметры в ANT_OPTS (мой установлен в ~ / .profile):

http://blog.dahanne.net/2010/06/03/debugging-any-java-application/

И профилирование может помочь. Я нашел проект Antro на ANT Wiki ...

http://sourceforge.net/projects/antro

Может быть, вы можете попробовать это. Говорят, что проект предназначен для АНТ, который выглядит многообещающе в решении вашей проблемы.

Также вы можете использовать Yourkit Java Profiler для профилирования процессора. YJP может показать график вызовов java-приложения, но я не уверен, что можно узнать, какие цели являются ANT.

В следующем документе показано, как запустить приложение Java с агентом YJP.

http://www.yourkit.com/docs/95/help/agent.jsp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...