Posso rendere l'attività di copia Ant specifica per il sistema operativo?

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

  •  01-07-2019
  •  | 
  •  

Domanda

Ho uno script Ant che esegue un'operazione di copia utilizzando il file compito di "copia"..È stato scritto per Windows e ha un percorso C:\ codificato come argomento 'todir'.Vedo che l'attività 'exec' ha un argomento del sistema operativo, esiste un modo simile per ramificare una copia in base al sistema operativo?

È stato utile?

Soluzione

Consiglierei di inserire il percorso in una proprietà, quindi di impostare la proprietà in modo condizionale in base al sistema operativo corrente.

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

Come vantaggio collaterale, una volta che si trova in una proprietà, puoi sovrascriverlo senza modificare lo script Ant.

Altri suggerimenti

I suggerimenti precedentemente pubblicati di una variabile specifica del sistema operativo funzioneranno, ma molte volte puoi semplicemente omettere il prefisso "C:" e utilizzare percorsi di file con barre (stile Unix) e funzionerà sia su sistemi Windows che Unix.

Quindi, se vuoi copiare file in "C:/tmp" su Windows e "/tmp" su Unix, potresti usare qualcosa come:

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

Se vuoi/necessario impostare un percorso condizionale basato sul sistema operativo, può essere semplificato come:

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

È possibile utilizzare l'attività condizione per passare a diverse attività di copia...dal manuale della formica:

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

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

  </not>
</and>

Dichiara una variabile che è la cartella principale della tua operazione.Prefiggi le tue cartelle con quella variabile, inclusa l'attività di copia.

Imposta la variabile in base al sistema operativo utilizzando un condizionale o passala come argomento allo script Ant.

Non puoi utilizzare una variabile e assegnarla in base al tipo?Potresti metterlo in a build.properties file.Oppure potresti assegnarlo utilizzando a condizione.

Ant-contrib ha il compito <osfamily />.Ciò esporrà la famiglia del sistema operativo a una proprietà (di cui specifichi il nome).Questo potrebbe essere di qualche beneficio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top