我已经看了这两篇文章。。他们没有帮助:
- Jenkins的PHP构建失败,';无法运行程序";phploc"'
- 无法运行通过composer安装的phploc
如果我在shell提示符下运行phploc,它运行得很好。所以它一定是我的build.xml
文件中的内容。。。但我不知道是什么。
<target name="phploc" description="Measure project size using PHPLOC">
<exec executable="phploc">
<arg path="${basedir}/../src" />
<arg value="--log-csv" />
<arg value="${basedir}/build/logs/phploc.csv" />
</exec>
</target>
这很好:
C:projectsproject1build>phploc ../src
phploc 2.0.6 by Sebastian Bergmann.
我的文件夹结构是
c:projectsproject1
build
...
vendor
bin
...
src
tests
c: \projects\project1\build>antphploc:
BUILD FAILED
C:projectsproject1buildbuild.xml:55: Execute failed: java.io.IOException:
Cannot run program "phploc": CreateProcess error=2, The system cannot find the
file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at org.apache.tools.ant.taskdefs.launcher.Java13CommandLauncher.exec(Jav
更新
C:>where phploc
INFO: Could not find files for the given pattern(s).
我错过了什么?
从聊天讨论来看,这是一个与PATH相关的问题。这正是我所想的。
在<exec executable="phploc">
中设置phploc
的绝对路径起到了作用。它在C:\projects\project1\build目录的命令行上工作,因为phploc
在它的一个子目录(vendor\bin)中,而这个子目录已经在PATH
变量中。
PATH=C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:Program Files (x86)Calibre2;C:xamppphp;C:ProgramDataComposerSetupbin;C:Program Files (x86)IDM Computer SolutionsUltraEdit;C:Program Files (x86)Java;c:antbin;.vendorbin
注意:虽然提供绝对路径在这里有效,但使用相对的路径是一个很好的做法,这样您的项目就可以移植了。在这种情况下,可以使用basedir作为所有相对路径的参考点。