如何在ant中创建临时目录?

时间:2012-05-24 09:48:28

标签: ant

我想在ant(版本1.6.5)中创建一个临时目录并将其分配给一个属性。

  • 命令“mktemp -d”对此非常理想,但是我找不到ant内部的类似功能
  • 除了tempfile task之外,我在文档中找不到任何官方功能,{{3}}显然只创建文件,而不是目录。
  • 我正在考虑使用exec来调用tempfile并获得结果,但这会使我的build.xml依赖于UNIX / linux,我想避免这种情况。

背景:我正在尝试加速在网络文件系统内部构建的现有构建过程。构建已将所有源复制到临时目录,但这是在同一文件系统上。我已经测试过将它更改为/ tmp / foo,它可以提高速度:3分钟对4分钟。

2 个答案:

答案 0 :(得分:25)

您可以将tempfile taskjava.io.tmpdir system 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 :(得分:-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>