Pergunta

Eu tenho um script Ant que executa uma operação de cópia usando a tarefa do 'copiar' . Ele foi escrito para Windows, e tem um codificado C: \ caminho como argumento 'TODIR'. Eu vejo a tarefa 'exec' tem um argumento OS, há uma maneira semelhante ao ramificar uma cópia com base no sistema operacional?

Foi útil?

Solução

Eu recomendo colocar o caminho em uma propriedade, em seguida, definir a propriedade condicionalmente baseado no sistema operacional atual.

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

Como um benefício de lado, uma vez que está em uma propriedade que você pode substituí-lo sem editar o script Ant.

Outras dicas

As sugestões postados anteriormente de uma variável OS específica vai funcionar, mas muitas vezes você pode simplesmente omitir o "C:" prefixo e use barras (estilo Unix) caminhos de arquivo e irá funcionar em ambos os sistemas Windows e Unix <. / p>

Então, se você deseja copiar os arquivos para "C: / tmp" no Windows e "/ tmp" em Unix, você pode usar algo como:

<copy todir="/tmp" overwrite="true" >
         <fileset dir="${lib.dir}">
             <include name="*.jar" />
         </fileset>
</copy>

Se você quer / necessidade de definir um caminho condicional com base no sistema operacional, pode ser simplificada como:

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

Você pode usar a tarefa condições de galho em diferentes tarefas de cópia ... da formiga manual:

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

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

  </not>
</and>

Declare uma variável que é a pasta raiz de sua operação. Prefixo suas pastas com essa variável, inclusive na tarefa de cópia.

Defina a variável baseado no sistema operacional usando uma condicional, ou passá-lo como um argumento para o script Ant.

Você não pode usar uma variável e atribuir a ele, dependendo do tipo? Você poderia colocá-lo em um arquivo build.properties. Ou você pode atribuí-lo usando um condição .

Ant-contrib tem o tarefa. Isto irá expor a família dos OS para uma propriedade (que você especificar o nome do). Isso poderia ser de algum benefício.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top