如何在PHING中的多个目标中使用用户输入?

时间:2012-07-31 09:59:23

标签: phing

我将所有构建任务拆分为多个目标,这些目标不打算单独执行。我试图在另外两个目标中使用来自targetA的用户输入值,但它们似乎处于不同的范围内。解决此问题的一种方法是将targetA添加到dependstargetB的{​​{1}}属性,但会导致targetC被调用两次。

那么有没有办法在全球范围内保存这个价值?或者也许确保目标只执行一次?

targetA

2 个答案:

答案 0 :(得分:2)

好吧,找到了解决方案。 属性范围似乎是彼此嵌套的,因此我们可以描述input目标,将所有输入放在那里,然后根据install定义主目标input。现在,我们将为install调用的所有目标提供所有可用的属性:

<target name="input" description="..." hidden="true">
    <input propertyName="property" defaultValue="default" ></input>
    <!-- more inputs here -->
</target>

<target name="targetB" description="..." hidden="true">
    <echo message="${property}" />
    <!-- some action goes on here -->
</target>

<target name="targetC" description="..." hidden="true">
    <echo message="${property}" />
    <!-- some action goes on here -->
</target>

<target name="install" depends="input">
    <phingcall target="targetB" />
    <phingcall target="targetC" />
</target>

答案 1 :(得分:2)

我为此苦苦挣扎。另一种方法是从文件中保存和检索属性。这允许在任务之间具有更灵活的依赖性,并且具有在会话之间保存值的额外好处。

例如,使每个输入目标以:

开头
<propertyprompt propertyName="site_dir" promptText="Name of site directory" promptCharacter="?" useExistingValue="true" />
<if>
  <available file="${site_dir}/build.props" />
  <then>
    <echo msg="Retrieving stored settings from ${site_dir}/build.props" />
    <property file="${site_dir}/build.props" />
  </then>
</if>

如果您想要在已经有答案的情况下跳过问题,请使用useExistingValue =“true”抓取您想要的任何输入。然后用:

结束目标
<echo msg="Updating stored settings in ${site_dir}/build.props" />
<exportproperties targetfile="${site_dir}/build.props" />