Можно ли сделать задачу копирования Ant специфичной для ОС? - PullRequest
19 голосов
/ 17 сентября 2008

У меня есть скрипт Ant, который выполняет операцию копирования, используя задачу 'copy' . Он был написан для Windows и в качестве аргумента 'todir' содержит жестко заданный путь C: \. Я вижу, что задача 'exec' имеет аргумент ОС, существует ли аналогичный способ ветвления копии на основе ОС?

Ответы [ 6 ]

31 голосов
/ 17 сентября 2008

Я бы порекомендовал указать путь в свойстве, а затем установить свойство в зависимости от текущей ОС.

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

6 голосов
/ 24 сентября 2008

Ранее опубликованные предложения по конкретной переменной ОС будут работать, но во многих случаях вы можете просто пропустить префикс "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>
2 голосов
/ 17 сентября 2008

Вы можете использовать условную задачу для перехода к различным задачам копирования ... из руководства ant:

<condition property="isMacOsButNotMacOsX">
<and>
  <os family="mac"/>

  <not>
    <os family="unix"/>

  </not>
</and>

1 голос
/ 17 сентября 2008

Объявите переменную, которая является корневой папкой вашей операции. Префикс ваших папок с этой переменной, в том числе в задаче копирования.

Установите переменную на основе ОС с помощью условного выражения или передайте ее в качестве аргумента в сценарий Ant.

1 голос
/ 17 сентября 2008

Нельзя использовать переменную и назначать ее в зависимости от типа? Вы можете поместить его в файл build.properties. Или вы можете назначить его, используя условие .

0 голосов
/ 24 июня 2009

Ant-contrib выполняет задачу . Это откроет семейство операционной системы для свойства (имя которого вы указываете). Это может быть полезным.

...