2012-05-24 2 views
15

Я хотел бы создать временный каталог в ant (версия 1.6.5) и присвоить его свойству.Как создать временную директорию в ant?

  • Команда «Mktemp -d» был бы идеальным для этого, но я не могу найти подобную функциональность изнутри муравей
  • Я не могу найти какую-либо официальную функцию в документации отдельно от tempfile task, который, по-видимому создает только файлы, а не каталоги.
  • Я рассматриваю возможность использования exec для вызова tempfile и получения результата, однако это сделает мой файл build.xml зависимым от UNIX/linux, чего я бы хотел избежать.

Фон: Я пытаюсь ускорить существующий процесс сборки, который строится внутри сетевой файловой системы. Сборка уже копирует весь исходный код во временный каталог, однако это одна и та же файловая система. Я тестировал изменение этого параметра на/tmp/foo, и он дает достойное увеличение скорости: 3 миллиона против 4 миллиона.

ответ

22

Вы можете объединить tempfile task с java.io.tmpdirsystem property, чтобы получить путь к файлу, чтобы использовать для создания временного реж:

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

Обратите внимание, что tempfile задача не создает файл (если вы не попросите его) , Он просто устанавливает свойство, которое можно использовать для создания файла или каталога.

Эта задача задает свойство имени временного файла. В отличие от java.io.File.createTempFile эта задача фактически не создает временный файл , но он гарантирует, что файл не существует, когда задание выполнено.

Выход в моей среде:

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

Ответ выше, только намекает на то, как создать временный каталог. Дело в том, что просто возвращает строку. Ответ получен более полный:

<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>    
Смежные вопросы