我将所有构建任务拆分为多个目标,这些目标不打算单独执行。我试图在另外两个目标中使用来自targetA
的用户输入值,但它们似乎处于不同的范围内。解决此问题的一种方法是将targetA
添加到depends
和targetB
的{{1}}属性,但会导致targetC
被调用两次。
那么有没有办法在全球范围内保存这个价值?或者也许确保目标只执行一次?
targetA
答案 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" />