web-dev-qa-db-ja.com

トリッキーなAntファイルセット(ディレクトリのすべてではなく、ほとんどを含む)

ファイルセットに必要なファイルだけをAntにプルさせる方法がわからない場合があります(なぜAntの人々は正規表現を使用しなかったのですか?)。

これが状況です。私はclassesディレクトリの下にたくさんのクラスを持っています。が欲しいです:

1)クラス内のすべてのファイル、

2)ただし、/ com/foo/barの下にあるものではありません

3)/com/foo/bar/AbstractCustomerAdapter.classとCustomerAdapterFactory.classが必要な場合を除きます。

/ com/foo/barの下のファイルは、通常、FooCustomerAdapter.classのような名前が付けられています。

一言で言えば、2つのjarを作成します。1つは顧客固有のアダプターのみを使用し、もう1つは他のすべてを使用します。これにより、新しいカスタマーアダプターを作成し、そのミニジャーだけを交換することができます。私を殺している上記のファイルセットは「他のすべて」です。

Antがファイルを除外すると、インクルードがファイルを元に戻すことはないので、項目2と3は、ファイルセットの実行方法に心を痛めています。抽象カスタマーアダプターではなく、すべてのカスタマーアダプターを除外するにはどうすればよいですか? AbstractCustomerAdapterを除外せずにXZYCustomerAdapterクラスを除外するために実行できるant互換のワイルドカードはありません。

まあ、少なくとも私は1つを理解することはできませんが、うまくいけば、StackOverflowの住人の1人が私より賢いです:)

25
Chris Kessel

単一のファイルセットを受け入れるほとんどのタスクは、複数のファイルセットも受け入れることができます。

<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>
47
carej

私は別の場所で2つの異なることをしています。時々、ファイルを一時的な場所にコピーして、1つのステップでもっともらしいすべてのものを含め、後のステップでいくつかの特定のアイテムを除外できるようにします。また、2つの別々のステートメントを使用することもあります。

一時ファイルは必要ないようですが、インストールをビルドする前に一部のテキストファイルをPC行末に変換するために、一時ディレクトリに関連するすべてのものをコピーして変換し(fixcrlfを使用)、次のファイルを選択します。作成された階層とは異なるプラットフォーム。

Tarファイルを作成するときは、特定のファイルを1行に含め、他のファイルを含む後の行のパターンを除外できれば十分なようです。

<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の場合と同様にファイル階層を明示的に構築し、修正された階層から2回目のパスでjarファイルを構築する必要があります。

1
PanCrit

カスタムセレクター を記述します。 APIは簡単に実装できます。そこにあなたはあなたが決める必要があるJavaのすべての力を持っています。

0
Peter Kofler