我正在使用Apache Ant进行构建。我有一些作曲家脚本属于几个供应商在供应商/bin文件夹。我已将此文件夹添加到系统路径,如果我在我的命令窗口上运行命令,但在构建文件中,我得到一个错误。有什么我应该做得不同的地方吗?Before是一个例子:
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyProject" default="build" basedir=".">
<target name="phpcpd" description="Find duplicate code using PHPCPD">
<exec executable="phpcpd">
<arg value="--version" />
</exec>
</target>
</project>'
当我运行ant phpcpd
phpcpd:
BUILD FAILED
C:xxxxxxxxxxxxxbuild.xml:96: Execute failed: java.io.IO Exce
ption: Cannot run program "phpcpd": CreateProcess error=2, The system
cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
at java.lang.Runtime.exec(Runtime.java:617)
at org.apache.tools.ant.taskdefs.launcher.Java13CommandLauncher.exec(Jav
a13CommandLauncher.java:41)
at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:428)
at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:442)
at org.apache.tools.ant.taskdefs.ExecTask.runExecute(ExecTask.java:628)
at org.apache.tools.ant.taskdefs.ExecTask.runExec(ExecTask.java:669)
at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:495)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
...
但是phpcpd --version
工作在命令提示符
ANT不知道phpcpd在哪里,因为它不与命令提示符共享路径。
一种方法是创建一个.bat文件来运行phpcpd用以下命令创建一个phpcpd.bat:
@echo off phpcpd --version
要更新的构建脚本:
<exec executable="phpcpd"> <arg value="--version" /> </exec>
To:
<exec executable="phpcpd.bat"/>
以上假设使用Windows命令提示符
我的解决方案是使用脚本的.phar文件。这样,构建文件在很大程度上就与平台无关了。所以
<target name="phpcpd" description="Find duplicate code using PHPCPD">
<exec executable="phpcpd">
<arg value="--version" />
</exec>
</target>
变成:
<target name="phpcpd" description="Find duplicate code using PHPCPD">
<exec executable="php">
<arg value="${phpcpd}" />
<arg value="--version" />
</exec>
</target>
其中${phpcpd}
是phar文件的路径
我使用绝对路径和可配置的可执行文件。属性如下:
build . xml
<project name="build">
<property file="executable.properties" />
<target name="run-phpcd" unless="${phpcpd.skip}">
<exec executable="${phpcpd.executable}"><!-- .. --></exec>
</target>
</project>
executable.dist.properties
phpcpd.skip = no
#phpcpd.executable = C:pathtophpcpd.bat
phpcpd.executable = /path/to/phpcpd.sh
这两个文件都可以提交到VCS,为了使用,复制模板文件(*.dist.properties)并将其重命名为executable.properties。将此文件添加到VCS的忽略列表中。