我正在尝试做一些相当简单的事情:采用路径或dirset并扩展其每个元素以获得新路径。 例如,假设我有一个包含
的路径c:\foo\plugins\com.foo.bar
c:\foo\plugins\com.baz.quux
我想通过以下方式获得一条新路径:
c:\foo\plugins\com.foo.bar\src
c:\foo\plugins\com.baz.quux\src
我实际上是在第一条路径上使用基于dirset的路径,然后使用<mappedresources>
获取第二条路径,但第二条路径最终会被截断为:
com.foo.bar\src
com.baz.quux\src
为了简化调试,我删除了路径并将dirset卡在映射的资源中,然后使用pathconvert macrodef进行调试输出。
我还用<identitymapper>
替换了我正在使用的globmapper(用于映射*到* / src)以查看它是否是globmapper。事实并非如此。
简而言之,我有这个:
<mappedresources id="src.resources">
<dirset dir="c:\foo">
<include name="com.*"/>
</dirset>
<identitymapper/>
</mappedresources>
现在当我用路径转换转储这个时,我得到了
com.foo.bar
com.baz.quux
(再次,这是调试,在我原来我使用globmapper,我得到相同的列表,但附加“/ src” - 但我用一个identitymapper替换globmapper)
现在,如果用常规<resources>
替换mappedresources,我会得到完整的路径
<resources id="src.resources">
<dirset dir="c:\foo">
<include name="com.*"/>
</dirset>
</resources>
然后我在转储时获得完整路径:
c:\foo\plugins\com.foo.bar
c:\foo\plugins\com.baz.quux
为什么?
ant映射器文档清楚地显示了使用globmapper和身份映射器映射到完整路径的完整路径的示例,并且只显示<flatten>
映射器执行类似这样的操作。那么为什么会发生这种情况呢?
如果没有这个,是否有更好的方法来获取包含另一个路径的所有元素的路径,但是使用这样的额外目录进行扩展?
最后一点说明:我在自定义任务中使用这些路径,而不是<copy>
或其他直接使用映射器的任务 - 我假设这不会直接在任务中发生,但我尚未测试过。