Я пытаюсь запустить скрипт Ant, который настроен на выполнение различных модулей PHP, например.
<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>
Однако происходит сбой с ошибкой «% 1 не является допустимым приложением Win32»
Я выполнил настройки реестра, как описано здесь …
http://php.net/manual/en/install.windows.commandline.php
а также повторил их для фар. Если я открою командное окно, я могу выполнить 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. Какая разница?
Спасибо!
NB: я установил php автономно (без apache) на машине с Windows, использующей в качестве сервера сборки (jenkins). PATH был изменен, чтобы включить php dir.
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>
Других решений пока нет …