10

次のようなファイルセットがある場合:

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

除外はインクルードよりも優先され、最終的にクラスはありません。[この架空の例では、zar.class はクラス ディレクトリにあるため] クラス ディレクトリにあるにもかかわらず、zar ファイルを含めたいと思います。

しばらくの間、セレクター、パターンセット、ファイルセットについて読んだり、ファイルセットを結合しようとしたりして、これに頭を悩ませましたが、うまくいきませんでした。

誰でもこれを行う方法を知っていますか?

4

3 に答える 3

4

なぜ除外要素が必要なのですか?

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

あなたが求めているファイルの正確なセットを提供する必要があります:zar.class、および.classclasses /内の他のファイルはありません。


これをコミュニティ wiki モードにしてください。よく考えてみると、それが実際に何を
求めているのかよくわからないからです。classes/.../ zar.classを含め、classes/....

私の解決策では、zar.class のみが提供されます。

コメントを残してください: これが適切な解決策でない場合は、削除します。

于 2009-01-09T08:46:21.797 に答える
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>
于 2009-01-09T07:01:31.367 に答える
2

元の質問で使用された 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 は表示されません。

于 2012-01-25T14:22:32.017 に答える