我有一个要求,我必须将驻留在 C:\temp\java\com\abc\def\xyz 目录下的 Java 类转换为 com.abc.def.xyz。ClassNameWithoutDOTClass] 在 ANT 脚本中。
我在蚂蚁中写了以下内容;
<property name="build.ws.java.dir" value="C:tempjava" />
<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:tempjavacomabcdefxyzDummyServiceWS.class
[echo] Trimmed wsClass = comabcdefxyzDummyServiceWS.class
我期待像'com.abc.def.xyz.DummyServiceWS'这样的东西。谁能指出我错过了什么?
谢谢
--
斯朱内霍
我已经通过使用高级映射器选项找到了一种方法,在这种情况下,我使用了[packagemapper]。所以我更新的脚本就像;
<pathconvert property="trimmed.wsClass" refid="java.ws.class" >
<packagemapper from="${build.ws.java.dir}${file.separator}*.class" to="*"/>
</pathconvert>
以上返回正确的值如下;
[echo] Actual wsClass = C:tempjavacomabcdefxyzDummyServiceWS.class
[echo] Trimmed wsClass = com.abc.def.xyz.DummyServiceWS
希望这有帮助,
--
斯朱内霍
引用路径转换手册:
注: 地图元素将按指定的顺序应用,并且仅应用第一个匹配的地图元素。因此,映射元素的顺序可能很重要,如果有 from 值是其他 from 值的前缀。
这意味着由于第一个映射匹配,其他映射将被忽略。 您需要指定三个单独的路径转换任务,其中一个处理前一个任务的结果。