【问题标题】:How to have an Ant INCLUDE fileset take priority over an EXCLUDE如何让 Ant INCLUDE 文件集优先于 EXCLUDE
【发布时间】:2009-01-09 06:32:51
【问题描述】:

如果我有这样的文件集:

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

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

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

有人知道怎么做吗?

【问题讨论】:

    标签: ant include fileset


    【解决方案1】:

    为什么需要排除元素?

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

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


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

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

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

    【讨论】:

      【解决方案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>
      

      【讨论】:

        【解决方案3】:

        原问题中使用了哪个版本的 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,就在它旁边。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多