web-dev-qa-db-ja.com

ディレクトリの内容に基づいて、Antファイルセットからディレクトリを除外する方法

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

私はantを使用して、各ローカリゼーションが別々のディレクトリにある配布jarを作成します。そのいくつかは不完全であり、リリースすべきではありません。

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

このディレクトリ構造の場合:

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

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

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

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

29
Chadwick

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

<exclude name="**/dir_name_to_exclude/**" />
57
Sasha

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

<exclude name="WEB-INF/" />

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

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

それが役に立てば幸い。

7
Alonso

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}の下のすべてのディレクトリを選択します。

5
mgaert

jarターゲットで動作します:

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

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

0
johndoe

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

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

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

0
lakhdeep

1つの方法は、まずファイルが存在するかどうかを確認し、存在する場合はコピーからフォルダを除外することです:

<target name="excludeLocales">

    <property name="de-DE.file" value="${basedir}/locale/de-DE/incompelte.flag"/>
    <available property="de-DE.file.exists" file="${de-DE.file}" />

    <copy todir="C:/temp/">
        <fileset dir="${basedir}/locale">
            <exclude name="de-DE/**" if="${de-DE.file.exists}"/>
            <include name="xy/**"/>
        </fileset>
    </copy>
</target>

これは他の言語でも機能するはずです。

0
Uncle_Sam

私のために働く:

<target name="build2-jar" depends="compile" >
   <jar destfile="./myJjar.jar">
        <fileset dir="./WebContent/WEB-INF/lib" includes="hibernate*.jar,mysql*.jar" />
        <fileset dir="./WebContent/WEB-INF/classes" excludes="**/controlador/*.class,**/form/*.class,**/orm/*.class,**/reporting/*.class,**/org/w3/xmldsig/*.class"/>
   </jar>
0
RaZieRSarE