我正在尝试做一些相当简单的事情:采用路径或 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 的路径作为第一条路径,然后使用 a<mappedresources>
来获取第二条路径,但第二条路径总是像这样被截断:
com.foo.bar\src
com.baz.quux\src
为了简化调试,我删除了路径并将 dirset 卡在映射资源中,然后我使用 pathconvert 宏定义进行调试输出。我还将我正在使用的 globmapper(用于将 * 映射到 */src)替换为<identitymapper>
只是为了查看它是否是 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)
现在,如果用常规替换 mappedresources <resources>
,我会得到完整路径
<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 mapper 文档清楚地显示了使用 globmapper 和身份映射器将完整路径映射到完整路径的示例,并且仅显示<flatten>
映射器执行了类似的操作。那么为什么会在这里发生呢?
如果失败了,是否有更好的方法来获取包含另一个路径的所有元素但使用这样的额外目录扩展的路径?
最后一点:我在自定义任务中使用这些路径,而不是在<copy>
直接使用映射器的任务或其他任务中 - 我假设这不会直接发生在任务中,但我还没有测试过。