如何加速ant应用于一组文件?

时间:2011-06-14 20:32:24

标签: php ant build

我正在使用以下Ant应用任务在一组PHP源文件上运行php lint。

<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

在评论中回答Hakre的问题,文件集共覆盖了66个文件。 如果有帮助,我可以粘贴蚂蚁输出。

编辑4

是否可以将相同的任务编写为exec任务?

3 个答案:

答案 0 :(得分:4)

假设它是与CI相关的作业,您可以在修改后的文件上应用lint:

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

如果您的代码库很大,那么一次修改多个文件(每次提交)会很奇怪。

如果脚本无效(预提交挂钩等),您也可以反过来解决问题并完全阻止提交

答案 1 :(得分:1)

  1. 尝试将parallel atttribute设置为true see Ant Manual
  2. 尝试在服务器模式下使用JVM运行Ant,通过ANT_OPTS设置VM参数“-server”
  3. 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>
    

    使用parallel =“true”时会得到什么错误信息?

答案 2 :(得分:1)

任务的并行化可以在更高的层次上实现:

<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>

由于任务耗费I / O,因此将其划分为更多线程可以大大缩短执行时间。