Могу ли я настроить задачу копирования Ant для конкретной операционной системы?
Вопрос
У меня есть Ant-скрипт, который выполняет операцию копирования с использованием задача "копировать".Он был написан для Windows и имеет жестко закодированный C:\ path в качестве аргумента 'todir'.Я вижу, что задача 'exec' имеет аргумент OS, есть ли аналогичный способ разветвления копии на основе OS?
Решение
Я бы рекомендовал указать путь в свойстве, а затем установить свойство условно в зависимости от текущей операционной системы.
<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-скрипта.
Другие советы
Ранее опубликованные предложения для конкретной переменной операционной системы будут работать, но часто вы можете просто опустить префикс "C:" и использовать прямые косые черты (стиль Unix) путей к файлам, и это будет работать как в системах 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>
Вы могли бы использовать задачу с условием для перехода к другим задачам копирования...из руководства ant:
<condition property="isMacOsButNotMacOsX">
<and>
<os family="mac"/>
<not>
<os family="unix"/>
</not>
</and>
Объявите переменную, которая является корневой папкой вашей операции.Добавляйте в свои папки эту переменную, в том числе в задаче копирования.
Установите переменную в зависимости от операционной системы, используя условное обозначение, или передайте ее в качестве аргумента Ant-скрипту.
Вы не можете использовать переменную и назначать ее в зависимости от типа?Вы могли бы поместить это в build.properties
файл.Или вы могли бы назначить его с помощью состояние.
У Ant-contrib есть задача <osfamily /> .Это предоставит семейству операционной системы доступ к свойству (имя которого вы указываете).Это могло бы принести некоторую пользу.