Apache Ant:无法调用 Composer 的供应商/bin 脚本



我正在使用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的忽略列表中。

相关内容

  • 没有找到相关文章

最新更新