Как ускорить применение муравья над набором файлов? - PullRequest
2 голосов
/ 15 июня 2011

Я использую следующую задачу Ant apply для запуска php lint над набором исходных файлов PHP.

<apply executable="php" failonerror="true">
    <arg value="-l" />
    <filelist refid="server.lib" />
    <filelist refid="server.scripts" />
    <fileset refid="client.lib" />
    <fileset refid="shared.lib" />
</apply>

Исходя из вывода Ant, это занимает около 30 секунд.

Та же задача, которую выполняет Make, выполняется практически мгновенно.

Есть ли способ ускорить задачу муравья?

РЕДАКТИРОВАТЬ

Я попытался добавить spawn = "true" в раздел применения, и он значительно ускорился.Помимо потери логирования, это хорошее решение?

РЕДАКТИРОВАТЬ 2

spawn = true не подходит для 'failonerror = true', поэтому spawn выигралне работает

РЕДАКТИРОВАТЬ 3

Чтобы ответить на вопрос Хакре в комментариях, наборы файлов охватывают 66 файлов вместе.Я могу вставить вывод муравья, если это поможет.

РЕДАКТИРОВАТЬ 4

Можно ли вместо этого написать эту же задачу как задачу exec?

Ответы [ 3 ]

4 голосов
/ 16 июня 2011

Предполагая, что это работа, связанная с CI, вы можете применить свой ворс к измененным файлам:

<fileset  dir="." includes="**/*.php">
  <modified />
</fileset>

, если ваша кодовая база огромна, было бы удивительно, что вы изменяете много файлов одновременно (за коммит).

Вы также можете обойти проблему и вообще запретить коммиты, если скрипт недопустим (перехват перед фиксацией и т. Д.)

1 голос
/ 13 сентября 2012

Распараллеливание задач может быть достигнуто на более высоком уровне:

<target name="phplint">

    <parallel threadcount="2">
        <apply executable="php" failonerror="true">
            <arg value="-l" />
            <fileset dir="${basedir}">
                <include name="**/Dir1/**.php" />
            </fileset>
        </apply>

        <apply executable="php" failonerror="true">
            <arg value="-l" />
            <fileset dir="${basedir}">
                <include name="**/Dir2/**.php" />
            </fileset>
        </apply>
    </parallel>

</target>

Поскольку задача потребляет ввод-вывод, разделение ее на несколько потоков дает хорошее сокращение времени выполнения.

1 голос
/ 15 июня 2011
  1. попытайтесь установить для параллельного атрибута значение true, см. Руководство по муравьям
  2. попытаться запустить Ant с JVM в режиме сервера, установить параметр виртуальной машины "-server" через ANT_OPTS

EDIT
моя попытка была бы что-то вроде =

<patternset id="php.sources">
    <include name="**/*.php"/>
</patternset>

<apply executable="php" failonerror="true" error="phperr.check" parallel="true">
    <arg value="-l" />
    <fileset dir="lib">
        <patternset refid="php.sources" />
    </fileset>
    <fileset dir="scripts">
        <patternset refid="php.sources" />
    </fileset>
    <fileset dir="client">
        <patternset refid="php.sources" />
    </fileset>
    <fileset dir="shared">
        <patternset refid="php.sources" />
    </fileset>
    <fileset dir="tests">
        <patternset refid="php.sources" />
    </fileset>
</apply>

какое сообщение об ошибке вы получаете при использовании параллельного = "true"?

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