最新

描述

如果目标文件或目标文件集比源文件或源文件集更新,则设置属性。使用 srcfile 属性指定单个源文件。使用嵌套的 <srcfiles> 元素指定一组源文件。这些是 文件集,而多个目标文件使用嵌套的 <mapper> 元素指定。

默认情况下,如果源文件(s)的时间戳不比相应目标文件(s)的时间戳更新,则属性的值将设置为 true。您可以通过指定 value 属性将值设置为除默认值以外的值。

如果使用 <srcfiles> 元素,而没有同时指定 <mapper> 元素,则默认行为是使用 合并映射器,并将 to 属性设置为 targetfile 属性的值。

通常,此任务用于设置属性,这些属性有助于避免根据指定文件的相对年龄执行目标。

参数

属性 描述 必需
property 要设置的属性的名称。
value 要设置属性的值。 否;默认为 true
srcfile 要与目标文件(s)进行比较的文件。 是,除非存在嵌套的 <srcfiles><srcresources> 元素。
targetfile 我们要确定其状态的文件。 是,除非存在嵌套的 <mapper> 元素。

作为嵌套元素指定的参数

srcfiles

嵌套的 <srcfiles> 元素是一个 文件集,允许您指定一组要与目标文件(s)进行比较的文件。

注意:您可以指定 srcfile 属性或嵌套的 <srcfiles> 元素,但不能同时指定两者。

请注意,该任务将完全忽略似乎与 srcfiles 文件集匹配的任何目录,它只会考虑普通文件。如果您需要适用于目录的逻辑,请使用嵌套的 srcresources 元素和 dirset(例如)。

srcresources

自 Apache Ant 1.7 起

嵌套的 <srcresources> 元素是一个 联合,允许您指定要与目标文件(s)进行比较的一组资源。

mapper

嵌套的 <mapper> 元素允许您指定一组目标文件,以检查它们是否与一组源文件保持最新。

映射器 to 属性相对于目标文件,或相对于嵌套的 srcfiles 元素的 dir 属性。

自 Ant 1.6.3 起,可以使用 filenamemapper 类型来代替映射器元素。

示例

如果 ${deploy}/xmlClasses.jar 文件比 ${src}/xml 目录中的任何 DTD 文件更新,则将属性 xmlBuild.notRequired 设置为 true

<uptodate property="xmlBuild.notRequired" targetfile="${deploy}\xmlClasses.jar">
  <srcfiles dir="${src}/xml" includes="**/*.dtd"/>
</uptodate>

这可以写成

<uptodate property="xmlBuild.notRequired">
  <srcfiles dir= "${src}/xml" includes="**/*.dtd"/>
  <mapper type="merge" to="${deploy}\xmlClasses.jar"/>
</uptodate>

也可以。

然后,xmlBuild.notRequired 属性可以在 <target> 标记的 unless 属性中使用,以有条件地运行该目标。例如,运行以下目标

<target name="xmlBuild" depends="chkXmlBuild" unless="xmlBuild.notRequired">
  ...
</target>

将首先运行 chkXmlBuild 目标,该目标包含确定 xmlBuild.notRequired 是否设置的 <uptodate> 任务。然后检查 unless 属性中命名的属性是否已设置/未设置。如果它确实被设置了(即,jar 文件是最新的),那么 xmlBuild 目标将不会运行。

以下示例显示了单个源文件与单个目标文件的比较

<uptodate property="isUpToDate"
          srcfile="/usr/local/bin/testit"
          targetfile="${build}/.flagfile"/>

如果 /usr/local/bin/testit 不比 ${build}/.flagfile 更新,则将属性 isUpToDate 设置为 true

以下显示了相对映射器的用法。

<uptodate property="checkUptodate.uptodate">
  <srcfiles dir="src" includes="*"/>
  <mapper type="merge" to="../dest/output.done"/>
</uptodate>
<echo message="checkUptodate result: ${checkUptodate.uptodate}"/>

前面的示例可能有点令人困惑,因此最好使用绝对路径

<property name="dest.dir" location="dest"/>
<uptodate property="checkUptodate.uptodate">
  <srcfiles dir="src" includes="*"/>
  <mapper type="merge" to="${dest.dir}/output.done"/>
</uptodate>