如果我有这样的文件集:
<fileset dir=".">
<exclude name="classes/*"/>
<include name="**/zar.class"/>
</fileset>
排除优先于包含,我最终没有任何类。[因为对于这个假设的例子,zar.class 在类目录中] 我想包含 zar 文件,即使它在类目录中。
我用头撞了一会儿,阅读了有关选择器、模式集、文件集、尝试组合文件集等的信息,但无法使其正常工作。
有人知道怎么做吗?
为什么需要排除元素?
<fileset dir=".">
<include name="**/zar.class"/>
</fileset>
应该为您提供您所追求的确切文件集:zar.class,而不是.class
classes/ 中的其他文件。
只需将其置于社区 wiki 模式,因为我不确定,再想一想,这实际上是你所追求的:
你可能想要一切,包括 classes/.../zar.class,除了 classes/....
我的解决方案只会给你 zar.class。
请发表评论:如果这不是一个好的解决方案,我将删除它。
我不确定您到底想要什么,但我认为您在查看模式集方面走在了正确的轨道上:怎么样:
<patternset id="a">
<exclude name="classes/*"/>
</patternset>
<patternset id="b">
<include name="**/zar.class"/>
</patternset>
<fileset dir=".">
<patternset refid="a" />
<patternset refid="b" />
</fileset>
原始问题中使用了哪个版本的 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。