我有一个要求,我必须将驻留在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
答案 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任务,一个处理前一个的结果。