1

Ant タスクの一部として 2 つの zip ファイルを作成しようとしています。どちらも似ていますが、1 つには余分なデータが含まれています。コードを減らすために、ファイルセットを定義して参照したいと思います。唯一の問題は、エラーが発生することです。

仕事:

<target name="create-zips" depends="cleanup, compile, package-jar">

    <zipfileset id="zipfiles">
        <zipfileset dir="${ant.project.name}-dist" includes="${jarname}.jar" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram_gui" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram_gui.command" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram.bat" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram_gui.bat" filemode="755" prefix="${title}"/>
        <zipfileset dir="${docs.dir}" includes="myprogram_readme.txt" prefix="${title}"/>
    </zipfileset>

    <zip destfile="${deploy.dir}/myprogram_${version}.zip" whenempty="fail" defaultexcludes="true">
         <zipfileset refid="zipfiles"/>
        <zipfileset dir="${otherdata.dir}" includes="other/*.*" prefix="${title}"/>
    </zip>
    <zip destfile="${deploy.dir}/myprogram_noother_${version}.zip" whenempty="fail" defaultexcludes="true">
        <zipfileset refid="zipfiles"/>
    </zip>
</target>

タスクの実行時:

    create-zips:

BUILD FAILED
/path/to/my/buildfile/build-tools.xml:119: Problem opening /path/to/my/data/docs/myprogram_readme.txt

ファイルが存在することを確認しました。readme インクルードを削除すると、別のファイルでエラーが発生するだけです。また、zipfileset をコピーして 2 つの別々のタグに貼り付けるだけでも、すべて正常に動作します。しかし、私はむしろそれをしたくありません。

編集: 2011 年 10 月 14 日にコンパイルされた Apache Ant(TM) バージョン 1.8.2、Mac OS X 10.7。他のプラットフォームでは試していません。

4

1 に答える 1

1

私は一度同じことをしようとしていたが、役に立たなかった。Afilesetはネストされたを受け入れませんfileset。チートしてアウターセットとして使用しようとするとzipfileset、antはそのコンテンツをzipファイルと見なします。antがファイルを解凍しようとすると、オープニングエラーが発生します。

属性がfileset必要です。dirこのディレクトリは、すべてのファイルセットコンポーネントの親である必要があります。悲しいですが本当。

私は回避策に行き着きました。Xファイルセットを作成します。これらのファイルセットは、タスクのネストされた要素として指定できzipます。特定の場合に必要なのがX未満の場合は、すべてのXファイルセットをデフォルトにし、常にすべてのXをzip形式で圧縮します。

<!-- define X empty filesets -->
<fileset dir="c:\temp\1" includes="asdfasdf.neverhappens" id="nullfileset" />
<fileset id="zipfileset2" refid="nullfileset" />
<fileset id="zipfileset3" refid="nullfileset" />

<!-- here go real sets -->
<zipfileset dir="${scripts.dir}" includes="myprogram" />

antファイルセットに注意してください。それらは変更可能です。一度「質問」を書いたのですが、誰かが削除してしまいました。よくやった静かな仕事、スタックの人々、それを「ありがとう」。

編集1:Linuxでは、の中にネストされたsdir="/"を試して使用することができます。私は自分の問題でWindowsを使用していたので、それを行うことができませんでした。Windowsには「/」がなく、さまざまなドライブからファイルを収集していました。selectorfileset

于 2012-02-29T08:32:12.280 に答える