17

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

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

背景:我正在尝试加快在网络文件系统中构建的现有构建过程。构建已经将所有源代码复制到一个临时目录,但是这是在同一个文件系统上。我已经测试了将其更改为 /tmp/foo 并且它提供了值得的速度提升:3 分钟与 4 分钟。

4

2 回答 2

25

您可以将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
于 2012-05-24T11:34:52.643 回答
-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>              
于 2017-10-01T15:29:21.180 回答