如果目标文件或目标文件集比源文件或源文件集更新,则设置属性。使用 srcfile 属性指定单个源文件。使用嵌套的 <srcfiles>
元素指定一组源文件。这些是 文件集,而多个目标文件使用嵌套的 <mapper>
元素指定。
默认情况下,如果源文件(s)的时间戳不比相应目标文件(s)的时间戳更新,则属性的值将设置为 true
。您可以通过指定 value 属性将值设置为除默认值以外的值。
如果使用 <srcfiles>
元素,而没有同时指定 <mapper>
元素,则默认行为是使用 合并映射器,并将 to 属性设置为 targetfile 属性的值。
通常,此任务用于设置属性,这些属性有助于避免根据指定文件的相对年龄执行目标。
属性 | 描述 | 必需 |
---|---|---|
property | 要设置的属性的名称。 | 是 |
value | 要设置属性的值。 | 否;默认为 true。 |
srcfile | 要与目标文件(s)进行比较的文件。 | 是,除非存在嵌套的 <srcfiles> 或 <srcresources> 元素。 |
targetfile | 我们要确定其状态的文件。 | 是,除非存在嵌套的 <mapper> 元素。 |
嵌套的 <srcfiles>
元素是一个 文件集,允许您指定一组要与目标文件(s)进行比较的文件。
注意:您可以指定 srcfile 属性或嵌套的 <srcfiles>
元素,但不能同时指定两者。
请注意,该任务将完全忽略似乎与 srcfiles 文件集匹配的任何目录,它只会考虑普通文件。如果您需要适用于目录的逻辑,请使用嵌套的 srcresources
元素和 dirset
(例如)。
自 Apache Ant 1.7 起
嵌套的 <srcresources>
元素是一个 联合,允许您指定要与目标文件(s)进行比较的一组资源。
嵌套的 <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>