ディレクトリの内容に基づいて特定のディレクトリを除外する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
がこのユースケースを処理できることを望んでいます。
私には次のアプローチが有効です:
<exclude name="**/dir_name_to_exclude/**" />
ディレクトリ名の後に「/」を追加する必要があります
<exclude name="WEB-INF/" />
代わりに、除外するすべてのディレクトリにincomplete.flag
ファイルを追加する代わりに、除外するすべてのディレクトリのリストを含むファイルを生成し、excludesfile
属性を使用します。このようなもの:
<fileset dir="${basedir}" excludesfile="FileWithExcludedDirs.properties">
<include name="locale/"/>
<exclude name="locale/*/incomplete.flag">
</fileset>
それが役に立てば幸い。
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}
の下のすべてのディレクトリを選択します。
jarターゲットで動作します:
<jar jarfile="${server.jar}" basedir="${classes.dir}" excludes="**/client/">
<manifest>
<attribute name="Main-Class" value="${mainServer.class}" />
</manifest>
</jar>
このコードには、「classes.dir」内のすべてのファイルが含まれますが、jarからディレクトリ「client」は除外されます。
これは、次のように「**」パターンを使用することで可能です。
<exclude name="maindir/**/incomplete.flag"/>
上記の「除外」は、incomplete.flagファイルを含むすべてのディレクトリを完全に除外します。
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>
これは他の言語でも機能するはずです。
私のために働く:
<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>