我正在使用下面的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"与"failoneror=true"配合不好,所以"spawn"不起作用。
编辑3
为了回答Hakre在评论中的问题,这些文件集总共覆盖了66个文件。如果有帮助的话,我可以粘贴蚂蚁输出。
编辑4
可以把这个任务写成exec任务吗?
假设这是一个与CI相关的作业,您可以将lint应用于修改后的文件:
<fileset dir="." includes="**/*.php">
<modified />
</fileset>
如果您的代码库很大,那么一次修改许多文件(每次提交)将是令人惊讶的。
如果脚本无效(预提交挂钩等),您也可以从另一个角度解决问题,并完全阻止提交。
- 尝试将parallel attribution设置为true,请参阅Ant手册
- 尝试在服务器模式下使用JVM运行Ant,通过Ant_OPTS设置VM参数"-server"
编辑
我的尝试大概是
<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"时会收到什么错误消息?
任务的并行化可以在更高的级别上实现:
<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,将其划分为更多的线程可以大大减少执行时间。