Как создать временный каталог в ant?

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

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

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

Ответы

Ответ 1

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

<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

Ответ 2

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

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