Ant:如何为父文件夹编写映射器

时间:2014-03-17 11:16:53

标签: regex ant apply mapper

环境:Windows 2008 R2 JDK:1.7.0_45(x64) Ant:1.8.3

我正在尝试提取一些cab文件。出于讨论的目的,假设以下布局:

A/L/X.cab
B/M/Y.cab
C/N/Z.cab

我尝试了什么:

<fileset id="cabfiles" dir="[correct path to parent of A,B,C]">
    <include name="**/*.cab"/>
</fileset>
<apply executable="expand" failonerror="true">
    <arg value="-r"/>
    <srcfile/>
    <arg value="-F:*"/>
    <targetfile/>
    <fileset refid="cabfiles"/>
    <regexpmapper from="(.*)\${file.separator}" to="\1"/>
</apply>

通过java.util.regex.Pattern的文档,这应该是一个贪婪的模式(虽然我不是那个专家)。

我的意图是:

 expand -r [absolute path to]\A\L\X.cab -F:* [absolute path to]\A\L
 expand -r [absolute path to]\B\M\Y.cab -F:* [absolute path to]\B\M
 expand -r [absolute path to]\C\N\Z.cab -F:* [absolute path to]\C\N

相反,我明白了:

Execute:Java13CommandLauncher: Executing 'expand' with arguments:
'-r'
'[absolute path to]\A\L\X.cab'
'-F:*'
'C:\\A\X'

我不希望引入对ant-contrib的依赖(除非这是唯一的出路)。

  • 使用单个(或链式)映射器将文件夹路径作为参数传递到应用任务是否可能(并且是逻辑的)?
  • 如果在创建父文件夹后(但很明显)将cab文件下载到各自的父文件夹中,映射器是否会将文件夹检测为过期w.r.t. cab文件本身并运行expand命令?或者只是跳过提取?

1 个答案:

答案 0 :(得分:1)

我明白了。

用于

relative="true" and dir="[absolute path to]"

应用任务的属性。