ant - запуск цели в конце каждой сборки - PullRequest
5 голосов
/ 14 июля 2011

Есть ли способ всегда запускать цель на конце каждой сборки?

Я знаю, что могу сделать что-то подобное ...

<target name="runJob" depends="actuallyRunJob, teardown"/>

... но это неаккуратно, так как мне понадобится обертка для каждой цели, которая нуждается в демонтаже.

Есть идеи?

Спасибо, Рой

Ответы [ 4 ]

4 голосов
/ 15 июля 2011

используйте buildlistener, например прослушиватель exec, который предоставляет контейнер задач для каждого результата сборки
(BUILD SUCCESSFUL | BUILD FAILED), где вы можете поместить все необходимые задачи в
см. Условное задание на ошибку exec в Ant для получения дополнительной информации
или прокрутите свой собственный слушатель сборки, смотрите =
http://ant.apache.org/manual/develop.html
и api docs из вашей установки ant =
$ ANT_HOME / документы / ручной / API / орг / Apache / инструменты / муравей / BuildListener.html

1 голос
/ 17 июля 2013

В том же духе, что и ответ Ребсе, вы можете написать BuildListener в Javascript следующим образом (если вы не против торговать расширением Ant для некоторого кода в вашем make-файле):

<project name="test-ant" default="build">                                                           

<target name="init">                                                                            
    <script language="javascript"> <![CDATA[                                                    
        function noop () {}                                                                     
        var listener = new org.apache.tools.ant.BuildListener() {                               
            buildFinished: function(e) {                                                        
                project.executeTarget("_finally");                                              
            },                                                                                  
            buildStarted: noop,                                                                 
            messageLogged: noop,                                                                
            targetStarted: noop,                                                                
            targetFinished: noop,                                                               
            taskStarted: noop,                                                                  
            taskFinished: noop                                                                  
        }                                                                                       
        project.addBuildListener(listener)                                                      
    ]]></script>                                                                                
</target>                                                                                       

<target name="build" depends="init"/>                                                           

<target name="fail" depends="init">                                                             
    <fail message="expected failure"/>                                                          
</target>                                                                                       

<target name="_finally">                                                                        
    <echo message="executing _finally target..."/>                                              
</target>                                                                                       

</project>

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

0 голосов
/ 11 июня 2013

Если это проект для Android, вы можете легко переопределить цель " -post-build " в своем локальном файле "build.xml".Эта цель как раз для этой цели.

0 голосов
/ 14 июля 2011

У меня была похожая потребность, и я закончил писать пользовательское задание, которое выглядит так:

<!-- a task that executes the embedded sequential element at the end of the build,
    but only if the nested condition is true; in this case, we're dumping out the
    properties to a file but only if the target directory exists (otherwise, the clean
    target would also generate the file and we'd never really be clean!) -->
<build:whendone>
    <condition>
        <available file="${project_target-dir}" />
    </condition>
    <sequential>
        <mkdir dir="${project_final-build-properties-file}/.." />
        <echoproperties destfile="${project_final-build-properties-file}" />
    </sequential>
</build:whendone>

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

К сожалению, я не могу поделиться конкретным кодом, но это не что иное, как Ant Task, который реализует SubBuildListener, в частности buildFinished(BuildEvent). Слушатель проверяет встроенное условие, а затем, если true, выполняет встроенное sequential.

Я бы хотел знать, есть ли лучший способ.

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