更改资源的修改时间,并可能同时创建它。除了处理单个文件外,此任务还可以处理 资源 和资源集合(也包括目录)。在 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 a或 MM/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 起,可以指定嵌套的 映射器。通过嵌套 fileset
、filelist
或 file
属性指定的文件使用指定的映射器进行映射。对于每个映射的文件,都会触摸结果文件。如果没有指定时间并且原始文件存在,则将使用其时间戳。如果没有指定时间并且原始文件不存在,则使用当前时间。自 Ant 1.8 起,任务设置(millis 和 datetime)优先于原始文件的时间戳。
如果 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>