代码之家  ›  专栏  ›  技术社区  ›  Chris Kessel

棘手的Ant文件集(包括大部分但不是全部目录)

ant
  •  23
  • Chris Kessel  · 技术社区  · 15 年前

    我遇到了一个例子,我就是想不出如何让Ant将我想要的文件放入文件集中(到底为什么Ant的人不使用regex?)。

    情况是这样的。我在classes目录下有很多类。我想:

    1) 类下的所有文件,

    3) 除了我想要/com/foo/bar/AbstractCustomerAdapter.class和CustomerAdapterFactory.class。

    /com/foo/bar下的文件通常命名为FooCustomerAdapter.class。

    简而言之,我们创建了两个罐子,一个只包含特定于客户的ADPATER,另一个包含其他所有内容。这使我们能够创建一个新的客户适配器,并仅交换那个小jar。上面的文件集是“其他所有东西”,这让我很难受。

    好吧,至少我想不出一个,但希望你们中的一个Stack Overflow居民比我更聪明:)

    3 回复  |  直到 15 年前
        1
  •  48
  •   carej carej    15 年前

    大多数接受单个文件集的任务也可以接受多个文件集。

    <jar file="...">
      <fileset dir="classes">
        <exclude name="com/foo/bar/**"/>
      </fileset>
    
      <fileset dir="classes">
        <include name="com/foo/bar/AbstractCustomerAdapter.class"/>
        <include name="com/foo/bar/CustomerAdapterFactory.class"/>
      </fileset>
    </jar>
    
        2
  •  1
  •   PanCrit    15 年前

    我在不同的地方做两件不同的事情。有时我会将文件复制到一个临时位置,以便在一个步骤中包含所有可能的内容,并在以后的步骤中排除一些特定的项目。其他时候,我使用两个单独的语句。

    您似乎不需要临时文件,但为了在构建安装之前将一些文本文件转换为PC行结尾,我复制并转换与临时目录相关的所有内容(使用fixcrlf),然后从创建的层次结构中为不同平台选择文件。

    在构建tar文件时,似乎能够在一行中包含特定文件,并在后面包含其他文件的行中排除模式就足够了。

    <tarfileset dir="classes" includes="classes" excludes="classes/com/foo/bar" />
    <tarfileset dir="classes" includes="classes/com/foo/bar/AbstractCustomerAdapter.class,classes/com/foo/bar/CustomerAdapterFactory.class" />

    如果Jar文件不是像tar和zip文件那样构造的,那么您可能需要像我使用fixcrlf那样显式地构建文件层次结构,并从正确的层次结构第二次构建Jar文件。

        3
  •  0
  •   martin clayton egrunin    14 年前

    写一篇 custom selector . 该api易于实现。在这里,您可以决定Java的所有功能。