Муравей: условная копия - PullRequest
13 голосов
/ 27 января 2011

Я хочу перезаписать файл hosts на компьютере с Windows, если пользователь разрешает это:

<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>

Как мне сделать копии, только если пользователь говорит да?

EDIT:

Я пробовал это:

    <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.

Я муравей-новичок ... Что мне нужно делать?

Ответы [ 2 ]

9 голосов
/ 27 января 2011

Вы можете использовать для этого condition или if задачу . (Последний является частью проекта ant-contrib .)

7 голосов
/ 27 января 2011

Вы можете использовать параметр "if" на цели, чтобы сделать его условным для устанавливаемого свойства.

Я никогда не использовал задачу "input" - я не знал, что она существовала дотолько сейчас (спасибо за внимание!) - но быстрый просмотр документации показывает, что он устанавливает в названном свойстве введенное значение, то есть после «ввода» свойство всегда устанавливается.Поэтому я думаю, вам понадобится «условие» для проверки значения и установки или не установки какого-либо другого свойства.

Примерно так.Я только что провел быстрый тест, и это работает.А именно, если вы отвечаете на вопрос «y», он печатает сообщение, а если вы отвечаете «n», то нет.

<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>
...