2012-08-26 71 views
0

当我尝试在CLI中运行“ant”时,出现BUILD FAILED“执行失败:java.in.IOException:无法运行程序”phploc“:CreateProcess error = 2”error(at the exec可执行文件=“phploc”行)。Apache Ant exec错误

我的文件结构:
- 建立/
- 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>