如何在Phing中对目标进行分组?

Tom*_*itt 15 php phing

有没有办法在Phing中分组目标?我有许多目标可以通过以不同的顺序和组合运行它们来重用.例如,要创建一个新的开发版本:

$ phing clean
$ phing prepare
$ phing build
$ phing runtests
Run Code Online (Sandbox Code Playgroud)

或者从repo更新dev构建:

$ phing update
$ phing runtests
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些目标分组以单个命令运行它们?我知道你可以链接目标,例如:

$ phing clean prepare build runtests
$ phing update runtests
Run Code Online (Sandbox Code Playgroud)

但理想情况下我想运行如下命令:

$ phing cleanbuild
Run Code Online (Sandbox Code Playgroud)

这将运行所有四个目标.这样,构建文件可以分离成可重用的目标.创建执行此操作的新目标将导致现有目标的代码重复.我知道你可以使用depends参数来执行其他目标,但我希望每个目标彼此独立.

Phing文档似乎不是很清楚如何做到这一点,但我确信可以在其他目标中调用目标,因为它必须是一种非常常见的做事方式.非常感谢.

Tom*_*itt 28

好吧,经过一番狩猎后,我找到了答案.您可以使用PhingCallTask​​任务从其他目标内部调用目标.复合任务的示例:

<target name="cleanbuild" description="Runs a clean dev build">
    <phingcall target="clean" />
    <phingcall target="prepare" />
    <phingcall target="build" />
    <phingcall target="runtests" />
</target>
Run Code Online (Sandbox Code Playgroud)

文档在这里:

http://www.phing.info/docs/guide/stable/apbs25.html

  • 文档中需要注意的一件事:关于范围的重要说明:每个<phingcall>标记都会创建一个新的本地范围.因此,一旦<phingcall>标记完成,该范围内设置的任何属性或其他变量将不再存在(或恢复为其先前的值). (6认同)

poi*_*son 15

你自己的答案很好.或者您可以使用该depends属性并使其更短:

<target name="cleanbuild" description="Runs a clean dev build" depends="clean, prepare, build, runtests"></target>
Run Code Online (Sandbox Code Playgroud)

  • 我同意可读性.依赖的一个优点是,如果任何目标依赖于另一个目标(如果被单独调用),则不会使依赖目标被调用两次.假设您想分别调用runtests.如果它总是依赖于'prepare',那么在runtests中使用<phingcall target ="prepare"/>会导致'prepare'目标在运行cleanbuild时被调用2x.如果你使用'depends',每次phing调用只会调用一次. (7认同)