Posso rendere l'attività di copia Ant specifica per il sistema operativo?
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?
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.