我想在ant(版本1.6.5)中创建一个临时目录并将其分配给一个属性。
- 命令"mktemp -d"将是理想的选择,但我无法从 ant 内部找到类似的功能
- 除了临时文件任务之外,我在文档中找不到任何官方功能,该任务显然只创建文件,而不是目录。
- 我正在考虑使用 exec 调用临时文件并获取结果,但这会使我的构建.xml依赖于 UNIX/linux,我想避免这种情况。
背景:我正在尝试加快在网络文件系统内构建的现有构建过程。构建已经将所有源代码复制到临时目录,但这位于同一文件系统上。我已经测试过将其更改为/tmp/foo 并且它提供了值得的速度提升:3 分钟与 4 分钟。
您可以将临时文件任务与 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:UserssudocodeAppDataLocalTemp
[echo] C:UserssudocodeAppDataLocalTempbuild1749402932
上面的答案只提示如何创建一个临时目录。关键是它只返回一个字符串。更完整的答案是
<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>