Ant中能否通过引用排除已有Fileset?求实现方案
实现方法
方法1:利用Ant集合运算任务(推荐)
通过<union>合并已有的测试分组,再用<difference>计算差集,完全避免规则重复:
- 定义包含所有测试的基础集合:
<fileset id="all.tests" dir="${test.build}"> <include name="**/Test*.class" /> </fileset>
- 合并已有的
foo.tests和bar.tests集合:
<union id="covered.tests"> <fileset refid="foo.tests" /> <fileset refid="bar.tests" /> </union>
- 生成未被覆盖的测试集合:
<difference id="other.tests"> <fileset refid="all.tests" /> <fileset refid="covered.tests" /> </difference>
这个方法会自动处理重复文件,直接通过引用已有分组生成目标集合,无需手动复制规则。
方法2:抽取规则为PatternSet复用
如果测试分组基于匹配规则而非具体文件,可以把规则抽成<patternset>,在exclude中直接引用:
- 抽取各分组的匹配规则:
<patternset id="foo.test.patterns"> <!-- 这里放入原foo.tests里的所有include规则 --> <include name="**/TestFoo*.class" /> </patternset> <patternset id="bar.test.patterns"> <!-- 这里放入原bar.tests里的所有include规则 --> <include name="**/TestBar*.class" /> </patternset>
- 用PatternSet定义原测试分组:
<fileset id="foo.tests" dir="${test.build}" refid="foo.test.patterns" /> <fileset id="bar.tests" dir="${test.build}" refid="bar.test.patterns" />
- 生成其他测试集合时引用PatternSet作为排除规则:
<fileset id="other.tests" dir="${test.build}"> <include name="**/Test*.class" /> <exclude refid="foo.test.patterns" /> <exclude refid="bar.test.patterns" /> </fileset>
这种方式适合规则较多的场景,把匹配逻辑抽离后统一维护,避免多处重复修改。
内容的提问来源于stack exchange,提问作者Dima
相关产品推荐
相关产品推荐

