1

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

我在 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

4

2 回答 2

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

于 2012-06-09T12:13:45.103 回答
0

引用pathconvert 手册

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

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

于 2012-06-09T03:21:47.977 回答