Pathconvert

描述

将嵌套的 资源集合 或单个资源的引用转换为特定平台的路径形式,可选地将结果存储到属性中或写入 Ant 资源。当您需要将资源集合转换为以给定字符(例如逗号或空格)分隔的列表时,也可以使用它,反之亦然,例如,将 FileList 中的文件列表转换为路径。

可以指定嵌套的 <map> 元素来映射 Windows 驱动器字母到 Unix 路径,反之亦然。

可以使用嵌套的 <mapper>自 Apache Ant 1.6.2 起)实现更复杂的转换。

参数

属性 描述 必需
targetos 目标架构。必须是 unixwindowsnetwaretandemos/2 之一。这是一种简写机制,用于根据指定的目标架构指定 pathsepdirsep
dirsep 在生成的路径中用作目录分隔符的字符。 否;默认为当前 JVM File.separator
pathsep 在生成的路径中用作路径元素分隔符的字符。 否;默认为当前 JVM File.pathSeparator
property 要放置转换后的路径的属性名称。 否,如果既没有设置 @property 也没有设置 @dest,则结果将被记录
dest 要写入转换后的路径的目标资源(Ant 默认将其解释为 File)。自 Ant 1.10.13 起 否,如果既没有设置 @property 也没有设置 @dest,则结果将被记录
refid 要转换的内容,以对 <path><fileset><dirset><filelist>引用 形式给出,这些内容在其他地方定义 是,除非提供嵌套的 <path> 元素
setonempty 即使结果为空字符串,是否也应该设置属性? 否;默认为 true
preserveduplicates 是否保留重复的资源。自 Ant 1.8 起 否;默认为 false

作为嵌套元素指定的参数

map

指定 Unix 和 Windows 之间路径前缀的映射。

属性 描述 必需
from 要匹配的前缀。请注意,当构建在 Windows 平台上运行时,此值不区分大小写,当在 Unix 平台上运行时,此值区分大小写。自 Ant 1.7.0 起,在 Windows 上,此值也不区分目录使用的斜杠样式,可以使用 /\
to 匹配 from 时要使用的替换文本。

每个 map 元素指定一个要应用于正在处理的路径元素的单个替换映射。如果未指定任何 map 条目,则不执行任何路径前缀映射。

注意:map 元素按指定的顺序应用,并且只应用第一个匹配的 map 元素。因此,如果任何 from 值是其他 from 值的前缀,则 map 元素的顺序可能很重要。

资源集合

如果未指定 refid 属性,则必须提供一个或多个嵌套的 资源集合

mapper

可以指定一个嵌套的 <mapper> 元素来执行各种文件名转换(自 Ant 1.6.2 起)。

示例

在下面的示例中,假设 ${wl.home} 属性的值为 d:\weblogic,而 ${wl.home.unix} 的值为 /weblogic

示例 1

在这里,该任务

<path id="wl.path">
  <pathelement location="${wl.home}/lib/weblogicaux.jar"/>
  <pathelement location="${wl.home}/classes"/>
  <pathelement location="${wl.home}/mssqlserver4/classes"/>
  <pathelement location="c:\winnt\System32"/>
</path>

<pathconvert targetos="unix" property="wl.path.unix" refid="wl.path">
  <map from="${wl.home}" to="${wl.home.unix}"/>
  <map from="c:" to=""/>
</pathconvert>

将生成下面显示的路径,并将其存储在名为 wl.path.unix 的属性中。

/weblogic/lib/weblogicaux.jar:/weblogic/classes:/weblogic/mssqlserver4/classes:/WINNT/SYSTEM32

示例 2

给定一个定义为

<filelist id="custom_tasks.jars"
          dir="${env.HOME}/ant/lib"
          files="njavac.jar,xproperty.jar"/>

的 FileList,那么

<pathconvert targetos="unix" property="custom_tasks.jars" refid="custom_tasks.jars">
  <map from="${env.HOME}" to="/usr/local"/>
</pathconvert>

将把文件列表转换为以下 Unix 路径

/usr/local/ant/lib/njavac.jar:/usr/local/ant/lib/xproperty.jar

示例 3

在这里,由 fileset(所有以 .java 结尾的文件)确定的文件名用逗号分隔,并将生成的列表放入 javafiles 属性中。未指定目录分隔符,因此它默认为当前平台的适当字符。此类列表随后可以在另一个需要逗号分隔的文件列表的任务中使用,例如 javadoc

<fileset dir="${src.dir}" id="src.files">
  <include name="**/*.java"/>
</fileset>

<pathconvert pathsep="," property="javafiles" refid="src.files"/>

示例 4

此任务将 prop 属性设置为 Windows 和 Unix 上的 def|ghi

<pathconvert property="prop" dirsep="|">
  <map from="${basedir}/abc/" to=""/>
  <path location="abc/def/ghi"/>
</pathconvert>