3

我将所有的构建任务分成几个目标,这些目标不打算单独执行。我正在尝试使用targetA其他两个目标中的用户输入值,但它们似乎在不同的范围内。解决这个问题的一种方法是添加targetA到的depends属性,targetBtargetC它会导致targetA被调用两次。

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

<target name="targetA" description="..." hidden="true">
    <input propertyName="property" defaultValue="default" ></input>
    <!-- some action goes on 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">
    <phingcall target="targetA" />
    <phingcall target="targetB" />
    <phingcall target="targetC" />
</target>
4

2 回答 2

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>
于 2012-08-01T06:35:42.053 回答
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" />
于 2013-10-13T22:58:56.807 回答