35

ディレクトリの内容に基づいて特定のディレクトリを除外する ant ファイルセットを作成するにはどうすればよいですか?

私は ant を使用して、各ローカライズを個別のディレクトリに格納するディストリビューション jar を作成します。そのうちのいくつかは不完全であり、リリースすべきではありません。

incomplete.flagant がディレクトリを除外するように、ディレクトリに何か (たとえば、という名前のファイル) を追加したいと思います。その後、翻訳が完了したらファイルを削除し、build.xml を変更せずにビルドに含めることができます。

このディレクトリ構造を考えると:

proj
+ locale
  + de-DE
  + en-US
  + fr-FR

このファイルセットはすべてのファイルを除外しますが、それらを含むincompelte.flagディレクトリ全体を除外するにはどうすればよいですか?

  <fileset dir="${basedir}">
    <include name="locale/"/>
    <exclude name="locale/*/incomplete.flag">
  </fileset>

fileset必要に応じて Ant タスクを作成できますが、このユース ケースを処理できることを願っています。

4

9 に答える 9

65

次のアプローチが私に有効です。

<exclude name="**/dir_name_to_exclude/**" />
于 2010-11-09T09:01:10.430 に答える
21

ディレクトリ名の後に「/」を追加する必要があります

<exclude name="WEB-INF/" />
于 2010-11-17T17:01:53.180 に答える
8

別の方法として、除外するすべてのディレクトリにファイルを追加する代わりに、incomplete.flag除外するすべてのディレクトリのリストを含むファイルを生成してから、excludesfile属性を使用します。このようなもの:

<fileset dir="${basedir}" excludesfile="FileWithExcludedDirs.properties">
  <include name="locale/"/>
  <exclude name="locale/*/incomplete.flag">
</fileset>

それが役に立てば幸い。

于 2010-02-11T03:06:26.463 に答える
6

Ant のドキュメントには、このタイプの問題の例が実際にあります。セレクター (上記) とマッパーを利用します。http://ant.apache.org/manual/Types/dirset.htmlの最後の例を参照してください。

<dirset id="dirset" dir="${workingdir}">
   <present targetdir="${workingdir}">
        <mapper type="glob" from="*" to="*/${markerfile}" />
   </present>
</dirset>

${workingdir}を含むすべてのディレクトリを選択します${markerfile}

于 2011-12-22T23:30:41.707 に答える
2

ユーザーmgaertによって提供された回答は私にとってはうまくいきます。正解としてマークされるべきだと思います。

次の例のような複雑なセレクターでも機能します。

<!-- 
    selects only direct subdirectories of ${targetdir} if they have a
    sub-subdirectory named either sub1 or sub2
-->
<dirset dir="${targetdir}" >
    <and>
        <depth max="0"/>
        <or>
            <present targetdir="${targetdir}">
                <globmapper from="*" to="*/sub1" />
            </present>
            <present targetdir="${targetdir}">
                <globmapper from="*" to="*/sub2" />
            </present>
        </or>
    </and>
</dirset>

したがって、ディレクトリ構造は次のようになります。

targetdir
├── bar
│   └── sub3
├── baz
│   └── sub1
├── foo
│   └── sub2
├── phoo
│   ├── sub1
│   └── sub2
└── qux
    └── xyzzy
        └── sub1

上記のダーセットには、

バズ・フー・フー
(barは sub3 のためxyzzy一致しませんが、 の直接のサブディレクトリではないため一致しませんtargetdir)

于 2016-01-05T16:25:31.987 に答える
0

これは、次のように "**" パターンを使用することで可能になります。

<exclude name="maindir/**/incomplete.flag"/>

上記の「除外」は、incomplete.flag ファイルを含むすべてのディレクトリを完全に除外します。

于 2010-10-29T15:24:26.753 に答える
0

それはjarターゲットで私のために働きます:

<jar jarfile="${server.jar}" basedir="${classes.dir}" excludes="**/client/">
  <manifest>
    <attribute name="Main-Class" value="${mainServer.class}" />
  </manifest>
</jar>

このコードには、「classes.dir」内のすべてのファイルが含まれますが、ディレクトリ「client」は jar から除外されます。

于 2011-06-03T23:35:16.673 に答える