Могу ли я настроить задачу копирования Ant для конкретной операционной системы?

StackOverflow https://stackoverflow.com/questions/86526

  •  01-07-2019
  •  | 
  •  

Вопрос

У меня есть 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 /> .Это предоставит семейству операционной системы доступ к свойству (имя которого вы указываете).Это могло бы принести некоторую пользу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top