10

如果我有这样的文件集:

<fileset dir=".">
  <exclude name="classes/*"/>
  <include name="**/zar.class"/>   
</fileset>

排除优先于包含,我最终没有任何类。[因为对于这个假设的例子,zar.class 在类目录中] 我想包含 zar 文件,即使它在类目录中。

我用头撞了一会儿,阅读了有关选择器、模式集、文件集、尝试组合文件集等的信息,但无法使其正常工作。

有人知道怎么做吗?

4

3 回答 3

4

为什么需要排除元素?

<fileset dir=".">
  <include name="**/zar.class"/>   
</fileset>

应该为您提供您所追求的确切文件集:zar.class,而不是.classclasses/ 中的其他文件。


只需将其置于社区 wiki 模式,因为我不确定,再想一想,这实际上是你所追求的:
你可能想要一切,包括 classes/.../zar.class,除了 classes/....

我的解决方案只会给你 zar.class。

请发表评论:如果这不是一个好的解决方案,我将删除它。

于 2009-01-09T08:46:21.797 回答
2

我不确定您到底想要什么,但我认为您在查看模式集方面走在了正确的轨道上:怎么样:

<patternset id="a">
  <exclude name="classes/*"/>
</patternset>

<patternset id="b">
  <include name="**/zar.class"/>  
</patternset>

<fileset dir=".">
  <patternset refid="a" />
  <patternset refid="b" />
</fileset>
于 2009-01-09T07:01:31.367 回答
2

原始问题中使用了哪个版本的 Ant?

使用 Ant 1.8.2,该节确实产生了预期的结果!?

<fileset dir="." id="some.fileset">
    <exclude name="build/classes/*" />
    <include name="**/A.class" />
</fileset>

<target name="test">
    <pathconvert pathsep="${line.separator}" property="listed.fileset" refid="some.fileset"/>
    <echo message="${listed.fileset}" />
</target>

路径和名称略有不同,但这确实显示了 A.class,而没有显示紧邻它的 B.class。

于 2012-01-25T14:22:32.017 回答