У меня есть Ant script, который выполняет операцию копирования с помощью 'copy' task. Он был написан для Windows и имеет жестко закодированный C:\путь как аргумент todir. Я вижу, что задача "exec" имеет аргумент ОС, есть ли аналогичный способ развернуть копию на основе ОС?
Могу ли я сделать задачу копирования Ant для ОС OS?
Ответ 1
Я бы рекомендовал поместить путь в свойство, а затем установить свойство условно на основе текущей ОС.
<condition property="foo.path" value="C:\Foo\Dir">
<os family="windows"/>
</condition>
<condition property="foo.path" value="/home/foo/dir">
<os family="unix"/>
</condition>
<fail unless="foo.path">No foo.path set for this OS!</fail>
В качестве побочного преимущества, когда он находится в свойстве, вы можете переопределить его без редактирования Ant script.
Ответ 2
Ранее опубликованные предложения конкретной переменной OS будут работать, но во многих случаях вы можете просто опустить префикс "C:" и использовать пути к файлам с прямым доступом (Unix style), и он будет работать как в системах Windows, так и в Unix.
Итак, если вы хотите скопировать файлы в "C:/tmp" в Windows и "/tmp" в Unix, вы можете использовать что-то вроде:
<copy todir="/tmp" overwrite="true" >
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</copy>
Если вам нужно/нужно установить условный путь на основе ОС, его можно упростить как:
<condition property="root.drive" value="C:/" else="/">
<os family="windows" />
</condition>
<copy todir="${root.drive}tmp" overwrite="true" >
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</copy>
Ответ 3
Вы можете использовать задачу условия для ветвления для разных задач копирования... из руководства ant:
<condition property="isMacOsButNotMacOsX">
<and>
<os family="mac"/>
<not>
<os family="unix"/>
</not>
</and>
Ответ 4
Вы не можете использовать переменную и назначить ее в зависимости от типа? Вы можете поместить его в файл build.properties
. Или вы можете назначить его с помощью condition.
Ответ 5
Объявить переменную, которая является корневой папкой вашей операции. Префикс папки с этой переменной, в том числе в задаче копирования.
Задайте переменную на основе ОС с помощью условного выражения или передайте ее как аргумент Ant script.
Ответ 6
Ant -contrib имеет значение < osfamily/ > задача. Это выведет семейство os в свойство (которое вы укажете имя). Это может принести пользу.