具有多个映射的Ant pathconvert任务

时间:2012-06-09 02:57:16

标签: ant map

我有一个要求,我必须将驻留在C:\ temp \ java \ com \ abc \ def \ xyz目录下的Java类转换为 com.abc.def.xyz。[ClassNameWithoutDOTClass] 在ANT脚本中。

我在ANT写过以下内容;

<property name="build.ws.java.dir" value="C:\temp\java" />
<for param="wsClass" >
    <path>
        <fileset dir="${build.ws.java.dir}" includes="**${file.separator}**WS.class" />
    </path>
    <sequential>
        <path id="java.ws.class" >
            <fileset file="@{wsClass}" />
        </path>
        <echo message="Actual wsClass = ${toString:java.ws.class}" />
        <pathconvert property="trimmed.wsClass" refid="java.ws.class" >
            <map from="${build.ws.java.dir}${file.separator}" to="" />
            <map from=".class" to="" />
            <map from="${file.separator}" to="." />
        </pathconvert>
        <echo message="Trimmed wsClass = ${trimmed.wsClass}" />
    </sequential>
</for>      

它应该工作但我得到以下结果(这是不正确的);

 [echo] Actual wsClass = C:\temp\java\com\abc\def\xyz\DummyServiceWS.class
 [echo] Trimmed wsClass = com\abc\def\xyz\DummyServiceWS.class

我期待“ com.abc.def.xyz.DummyServiceWS ”之类的内容。任何人都可以指出我错过了什么吗?

谢谢,

-

SJunejo

2 个答案:

答案 0 :(得分:2)

实际上我通过使用高级映射器选项找到了一种方法,在这种情况下我使用了 [packagemapper] 。所以我更新的脚本就像;

<pathconvert property="trimmed.wsClass" refid="java.ws.class" >
    <packagemapper from="${build.ws.java.dir}${file.separator}*.class" to="*"/>
</pathconvert>

以上返回正确的值如下;

[echo] Actual wsClass = C:\temp\java\com\abc\def\xyz\DummyServiceWS.class
[echo] Trimmed wsClass = com.abc.def.xyz.DummyServiceWS

希望这有帮助,

-

SJunejo

答案 1 :(得分:0)

来自pathconvert manual

的引用
  

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

这意味着自第一个映射匹配后,其他映射被忽略。您需要指定三个单独的pathconvert任务,一个处理前一个的结果。