我试图运行一个设置为执行各种php模块的ant脚本,例如
<target name="phploc" description="Measure project size using PHPLOC">
<exec executable="${basedir}/build/tools/phploc.phar">
<arg value="--count-tests" />
<arg path="${basedir}/src" />
<arg path="${basedir}/tests" />
</exec>
</target>
然而,它失败并出现错误&#34;%1不是有效的Win32应用程序&#34;
我已执行了此处所述的注册表调整... http://php.net/manual/en/install.windows.commandline.php
并重复他们的phar。如果我打开一个命令窗口,我可以通过输入它的名称来执行php或phar文件,例如phploc.phar而不是完整的php.exe phploc.phar但是它不能通过ant工作。
如果我将ant文件更改为:
<target name="phploc" description="Measure project size using PHPLOC">
<exec executable="php">
<arg line="${basedir}/build/tools/phploc.phar --count-tests" />
<arg path="${basedir}/src" />
<arg path="${basedir}/tests" />
</exec>
</target>
一切正常,因为我猜这已被翻译为php.exe /build/tools/phploc.phar
(或类似的东西)。
构建文件来自我通过git克隆的其他人的项目,所以理想情况下我不想改变它。
所以我想我不明白为什么它通过命令行工作(即识别.php .phar是可执行的)但不是通过ant。有什么区别?
谢谢!
注意:我在用作构建服务器(jenkins)的Windows机器上安装了php独立(无apache)。 PATH已更改为包含php目录。
答案 0 :(得分:1)
Windows * .bat文件必须通过cmd
运行。将您的示例更改为:
<target name="phploc" description="Measure project size using PHPLOC">
<exec executable="cmd">
<arg value="/c"/>
<arg value="${basedir}/build/tools/phploc"/>
<arg value="--count-tests" />
<arg path="${basedir}/src" />
<arg path="${basedir}/tests" />
</exec>
</target>