Apache Ant 执行错误
Posted
技术标签:
【中文标题】Apache Ant 执行错误【英文标题】:Apache Ant exec error 【发布时间】:2012-08-26 18:58:29 【问题描述】:当我尝试在 CLI 中运行“ant”时,我收到 BUILD FAILED “Execute failed: java.in.IOException: Cannot run program “phploc”: CreateProcess error=2” 错误(在 exec 可执行文件 = phploc”行)。
我的文件结构: -- 构建/ -- src/ -- build.xml
Build.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project name="..." default="build">
<target name="build"
depends="prepare,phploc,pdepend,phpmd-ci,phpcs-ci,phpcpd,phpdox,phpunit,phpcb"/>
<target name="build-parallel"
depends="prepare,tools-parallel,phpunit,phpcb"/>
<target name="tools-parallel" description="Run tools in parallel">
<parallel threadCount="2">
<sequential>
<antcall target="pdepend"/>
<antcall target="phpmd-ci"/>
</sequential>
<antcall target="phpcpd"/>
<antcall target="phpcs-ci"/>
<antcall target="phploc"/>
<antcall target="phpdox"/>
</parallel>
</target>
<target name="clean" description="Cleanup build artifacts">
<delete dir="$basedir/build/api"/>
<delete dir="$basedir/build/code-browser"/>
<delete dir="$basedir/build/coverage"/>
<delete dir="$basedir/build/logs"/>
<delete dir="$basedir/build/pdepend"/>
</target>
<target name="prepare" depends="clean" description="Prepare for build">
<mkdir dir="$basedir/build/api"/>
<mkdir dir="$basedir/build/code-browser"/>
<mkdir dir="$basedir/build/coverage"/>
<mkdir dir="$basedir/build/logs"/>
<mkdir dir="$basedir/build/pdepend"/>
<mkdir dir="$basedir/build/phpdox"/>
</target>
<target name="phploc" description="Measure project size using PHPLOC">
<exec executable="phploc">
<arg value="--log-csv" />
<arg value="$basedir/build/logs/phploc.csv" />
<arg path="$basedir/src/" />
</exec>
</target>
<target name="pdepend" description="Calculate software metrics using PHP_Depend">
<exec executable="pdepend">
<arg value="--jdepend-xml=$basedir/build/logs/jdepend.xml" />
<arg value="--jdepend-chart=$basedir/build/pdepend/dependencies.svg" />
<arg value="--overview-pyramid=$basedir/build/pdepend/overview-pyramid.svg" />
<arg path="$basedir/src/application" />
</exec>
</target>
<target name="phpmd"
description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
<exec executable="phpmd">
<arg path="$basedir/src/application" />
<arg value="text" />
<arg value="$basedir/build/phpmd.xml" />
</exec>
</target>
<target name="phpmd-ci" description="Perform project mess detection using PHPMD creating a log file for the continuous integration server">
<exec executable="phpmd">
<arg path="$basedir/src/application" />
<arg value="xml" />
<arg value="$basedir/build/phpmd.xml" />
<arg value="--reportfile" />
<arg value="$basedir/build/logs/pmd.xml" />
</exec>
</target>
<target name="phpcs"
description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
<exec executable="phpcs">
<arg value="--standard=$basedir/build/phpcs.xml" />
<arg path="$basedir/src/application" />
</exec>
</target>
<target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server">
<exec executable="phpcs" output="/dev/null">
<arg value="--report=checkstyle" />
<arg value="--report-file=$basedir/build/logs/checkstyle.xml" />
<arg value="--standard=$basedir/build/phpcs.xml" />
<arg path="$basedir/src/application" />
</exec>
</target>
<target name="phpcpd" description="Find duplicate code using PHPCPD">
<exec executable="phpcpd">
<arg value="--log-pmd" />
<arg value="$basedir/build/logs/pmd-cpd.xml" />
<arg path="$basedir/src/application" />
</exec>
</target>
<target name="phpdox" description="Generate API documentation using phpDox">
<exec executable="phpdox"/>
</target>
<target name="phpunit" description="Run unit tests with PHPUnit">
<exec executable="phpunit" failonerror="true"/>
</target>
<target name="phpcb" description="Aggregate tool output with PHP_CodeBrowser">
<exec executable="phpcb">
<arg value="--log" />
<arg path="$basedir/build/logs" />
<arg value="--source" />
<arg path="$basedir/src" />
<arg value="--output" />
<arg path="$basedir/build/code-browser" />
</exec>
</target>
</project>
您能否就如何解决此问题提供一些建议? 谢谢。
【问题讨论】:
【参考方案1】:错误 2 表示“找不到文件”,这表明您尝试运行的命令不在您的 PATH 上。但还要注意,Ant 的 exec
任务在后台使用 Java 的 Runtime.exec
,它在 Windows 上只能运行 .exe
命令,而不是 .bat
文件。要运行批处理文件,您需要使用
<exec executable="cmd">
<arg value="/c" />
<arg file="C:/path/to/phploc.bat" />
<arg value="--log-csv" />
<arg value="$basedir/build/logs/phploc.csv" />
<arg path="$basedir/src/" />
</exec>
【讨论】:
以上是关于Apache Ant 执行错误的主要内容,如果未能解决你的问题,请参考以下文章