为什么无论使用什么映射器,ant mappedresources似乎都会将文件名路径变平

时间:2013-10-18 17:28:41

标签: ant

我正在尝试做一些相当简单的事情:采用路径或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>或其他直接使用映射器的任务 - 我假设这不会直接在任务中发生,但我尚未测试过。

0 个答案:

没有答案