【问题标题】:How to create temporary directory in ant?如何在ant中创建临时目录?
【发布时间】:2012-05-24 09:48:27
【问题描述】:

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

  • “mktemp -d”命令非常适合,但我在 ant 内部找不到类似的功能
  • 我在文档中找不到任何官方函数,除了 tempfile task 显然只创建文件,而不是目录。
  • 我正在考虑使用 exec 调用 tempfile 并获取结果,但是这将使我的 build.xml 依赖于 UNIX/linux,我希望避免这种情况。

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

【问题讨论】:

    标签: ant


    【解决方案1】:

    您可以将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
    

    【讨论】:

      【解决方案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>              
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-21
        • 2013-09-18
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        • 2021-07-23
        相关资源
        最近更新 更多