如果用户允许,我想覆盖Windows机器上的hosts文件:
<input message="Do you want to overwrite the HOSTS file?"
addproperty="overwrite.hosts" validargs="yes,no" />
<copy tofile="${env.WINDIR}/system32/drivers/etc/hosts.backup">
<fileset file="${env.WINDIR}/system32/drivers/etc/hosts" />
</copy>
<copy todir="${env.WINDIR}/system32/drivers/etc">
<fileset file="${trainer.dir}/hosts" />
</copy>
如果用户说“是”,我该如何处理副本?
编辑:
我试过了:
<input message="Do you want to overwrite the HOSTS file?" addproperty="overwrite.hosts" validargs="yes,no" />
<if>
<equals arg1="${overwrite.hosts}" arg2="yes" />
<then>
<copy tofile="${env.windir}/system32/drivers/etc/hosts.backup">
<fileset file="${env.windir}/system32/drivers/etc/hosts">
</fileset>
</copy>
<copy todir="${env.windir}/system32/drivers/etc">
<fileset file="${trainer.dir}/hosts">
</fileset>
</copy>
</then>
</if>
我得到了这个输出:
C:\trainer\build.xml:16: Problem: failed to create task or type if
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
我是一个蚂蚁新手...我需要做什么?
答案 0 :(得分:9)
您可以使用condition
或if
task。 (后者是ant-contrib项目的一部分。)
答案 1 :(得分:7)
您可以在目标上使用“if”参数,使其以所设置的属性为条件。
我从未使用过“输入”任务 - 我直到现在才知道它存在(感谢抬头!) - 但是快速查看文档表明它将命名属性设置为输入的值,即在“输入”之后,始终设置属性。所以我猜你需要一个“条件”来测试值并设置或不设置其他属性。
像这样的东西。我刚刚进行了快速测试,这确实有效。也就是说,如果你回答问题“y”,它会打印出这条消息,如果你回答“是”,它就不会。
<project name="test" default="do.whatever">
<target name="decide.do.whatever">
<input message="So you wanna do this or not?" validargs="y,n" addproperty="wanna"/>
<condition property="wanna.yes">
<equals arg1="${wanna}" arg2="y"/>
</condition>
</target>
<target name="do.whatever" depends="decide.do.whatever" if="wanna.yes">
<echo message="Yeah he wannas."/>
</target>
</project>