2012-05-24 13 views
15

Mi piacerebbe creare una directory temporanea in form (versione 1.6.5) e assegnarla a una proprietà.Come creare una directory temporanea in formica?

  • Il comando "mktemp -d" sarebbe l'ideale per questo, ma non riesco a trovare una funzionalità simile dall'interno formica
  • non riesco a trovare alcuna funzione ufficiale nella documentazione a parte il tempfile task che apparentemente crea solo file, non directory.
  • Sto pensando di usare exec per chiamare tempfile e ottenere il risultato, tuttavia questo renderà il mio build.xml dipendente da UNIX/linux, che vorrei evitare.

Background: Sto provando a velocizzare un processo di generazione esistente che costruisce all'interno del filesystem in rete. La build copia già tutta la sorgente in una directory temporanea, tuttavia si trova sullo stesso file system. Ho provato a cambiare questo in/tmp/foo e dà un aumento di velocità utile: 3mins vs 4mins.

risposta

22

Si potrebbe combinare il tempfile task con la java.io.tmpdirsystem property per ottenere un percorso del file da utilizzare per creare una directory temporanea:

<project default="test"> 

    <target name="test"> 
     <echo>${java.io.tmpdir}</echo> 
     <tempfile property="temp.file" destDir="${java.io.tmpdir}" prefix="build"/> 
     <echo>${temp.file}</echo> 
    </target> 

</project> 

Nota che il compito tempfile non crea il file (a meno che non si chiede a) . Imposta solo una proprietà che è possibile utilizzare per creare un file o una dir.

Questa attività imposta una proprietà sul nome di un file temporaneo. A differenza di java.io.File.createTempFile, questa attività non crea effettivamente il file temporaneo , ma garantisce che il file non esisteva quando l'attività è stata eseguita.

uscita nel mio ambiente:

test: 
    [echo] C:\Users\sudocode\AppData\Local\Temp\ 
    [echo] C:\Users\sudocode\AppData\Local\Temp\build1749402932 
-1

La risposta di cui sopra solo accenna a come creare una directory temporanea. Il punto è che restituisce semplicemente una stringa. Una risposta più completa è

<target name="temptest" description="test making tempdir"> 
    <tempfile property="mytempdir" destdir="${java.io.tmpdir}"/> 
    <tempfile property="mytempfile" destdir="${mytempdir}"/> 
    <tstamp> 
     <format property="now" pattern="MMMM dd yyyy"/> 
    </tstamp> 
    <copy tofile="${mytempfile}"> 
     <string value="today=${now}"/> 
    </copy> 
    <property file="${mytempfile}"/> 
    <echo message="It it now ${today}"/> 
</target>    
Problemi correlati