触摸

描述

更改资源的修改时间,并可能同时创建它。除了处理单个文件外,此任务还可以处理 资源 和资源集合(也包括目录)。在 Apache Ant 1.7 之前,只支持 FileSet 或 Filelist自 Ant 1.6 起)。

Ant 使用 java.io.File 的 API 来设置最后修改时间,这有一些限制。例如,时间戳粒度取决于操作系统,有时操作系统可能允许比毫秒更小的粒度。如果您需要更多控制,则必须回退到 <exec> 任务和本机命令。

自 Ant 1.8.2 起,如果无法更改文件修改时间,则会记录警告消息。例如,如果您尝试更改在许多 Unix 系统上您不拥有的文件的修改时间,就会发生这种情况。

参数

属性 描述 必需
文件 文件的名称。 除非已指定嵌套资源集合元素
毫秒 指定文件自 1970 年 1 月 1 日午夜以来的新修改时间(以毫秒为单位)。 否;datetime 优先,但是如果两者都省略,则假定为当前时间
日期时间 指定文件的新的修改时间。自 Ant 1.8 起,特殊值 now 表示当前时间。
模式 使用当前区域设置的 SimpleDateFormat 兼容模式字符串。自 Ant 1.6.3 起 否;默认为 MM/dd/YYYY hh:mm aMM/dd/yyyy hh:mm:ss a,使用美国区域设置。
mkdirs 在触摸新文件时是否创建不存在的父目录。自 Ant 1.6.3 起 否;默认 false
详细 是否记录新文件的创建。自 Ant 1.6.3 起 否;默认 true

作为嵌套元素指定的参数

任何资源集合

您可以使用任意数量的嵌套资源集合元素来定义此任务的资源,并引用在其他地方定义的资源。注意:传递给此任务的资源必须实现 org.apache.tools.ant.types.resources.Touchable 接口,这对于所有基于文件系统的资源都是正确的,例如由路径、文件集或文件列表返回的资源。

为了向后兼容,嵌套文件集匹配的目录也将被“触摸”,使用 type 选择器来抑制这一点。这仅适用于直接嵌套到任务中的文件集,不适用于嵌套到路径或任何其他资源集合中的文件集。

映射器

自 Ant 1.6.3 起,可以指定嵌套的 映射器。通过嵌套 filesetfilelistfile 属性指定的文件使用指定的映射器进行映射。对于每个映射的文件,都会触摸结果文件。如果没有指定时间并且原始文件存在,则将使用其时间戳。如果没有指定时间并且原始文件不存在,则使用当前时间。自 Ant 1.8 起,任务设置(millisdatetime)优先于原始文件的时间戳。

示例

如果 myfile 不存在,则创建它,并将修改时间更改为当前时间。

<touch file="myfile"/>

如果 myfile 不存在,则创建它,并将修改时间更改为 2000 年 6 月 28 日下午 2:02(对于习惯使用 24 小时制的人来说是 14:02)。

<touch file="myfile" datetime="06/28/2000 2:02 pm"/>

src_dir 中找到的所有文件和目录的修改时间更改为 1974 年 10 月 9 日下午 4:30。

<touch datetime="09/10/1974 4:30 pm">
    <fileset dir="src_dir"/>
</touch>

如果 myfile 不存在,则创建它,并将修改时间更改为 2000 年 6 月 28 日下午 2:02:17(对于习惯使用 24 小时制的人来说是 14:02:17),如果文件系统允许精度为一秒——否则为接近它的时间。

<touch file="myfile" datetime="06/28/2000 2:02:17 pm"/>

如果 bar 不存在,则创建它,并将修改时间更改为 foo 的时间。

<touch file="foo">
    <mapper type="glob" from="foo" to="bar"/>
</touch>

如果 shadow 目录不存在,则为 src 目录中的每个 .java 文件在该目录中创建文件,并将这些文件的修改时间更改为当前时间。

<touch file="foo" datetime="now">
    <mapper type="regexp" from="^src(.*)\.java" to="shadow\1.empty"/>
</touch>