2012-05-24 22 views
15

Me gustaría crear un directorio temporal en ant (versión 1.6.5) y asignarlo a una propiedad.¿Cómo crear un directorio temporal en hormiga?

  • El comando "mktemp -d" sería ideal para esto, pero no puedo encontrar una funcionalidad similar desde el interior de la hormiga
  • No puedo encontrar ninguna función oficial en la documentación aparte de la tempfile task que al parecer sólo crea archivos, no directorios
  • Estoy considerando usar exec para llamar a tempfile y obtener el resultado; sin embargo, esto hará que mi build.xml dependa de UNIX/linux, lo que me gustaría evitar.

Antecedentes: Estoy tratando de acelerar un proceso de compilación existente que se genera dentro del sistema de archivos en red. La compilación ya copia todo el origen a un directorio temporal, sin embargo, esto está en el mismo sistema de archivos. He probado cambiar esto a/tmp/foo y da un aumento de velocidad que vale la pena: 3 minutos frente a 4 minutos.

Respuesta

22

Se puede combinar la tempfile task con el java.io.tmpdirsystem property para conseguir una ruta de archivo a utilizar para crear un directorio temporal:

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

Tenga en cuenta que la tarea tempfile no crea el archivo (a menos que preguntar a) . Simplemente establece una propiedad que puede usar para crear un archivo o directorio.

Esta tarea establece una propiedad para el nombre de un archivo temporal. A diferencia de java.io.File.createTempFile, esta tarea en realidad no crea el archivo temporal , pero sí garantiza que el archivo no existió cuando se ejecutó la tarea .

salida en mi entorno:

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

La respuesta anterior sólo hace alusión a cómo crear un directorio temporal. El punto es que simplemente devuelve una cadena. Una respuesta más completa es

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