2

ストックアリを使用して、ファイルリストの各要素にzipfilesetを使用することは可能ですか? 一度使用しているjarのリストを指定してから、それをクラスパスおよび自分のjarにデプロイするファイルとして指定できる方法を探しています。

これは、私のリリース jar をビルドしてすべてのクラス ファイルを含める最速の方法ですが、各 jar を zipfileset として指定する必要があります。

<jar destfile="release.jar">
    ... my files ...
    <zipfileset src="jar/exampleA.jar" includes="**/*.class"/>
    <zipfileset src="jar/exampleB.jar" includes="**/*.class"/>
</jar>

次のように指定することをお勧めします。

<filelist id="proj.jars" dir="jar">
    <file id="exampleA" name="exampleA.jar"/>
    <file id="exampleB" name="exampleB.jar"/>
</filelist>

<jar destfile="release.jar">
    ... my files ...
    <!-- for each jar in proj.jars -->
        <zipfileset src="${jar}" includes="**/*.class"/>
</jar>

実用的なソリューションはありますが、大幅に遅くなります (4 倍または 5 倍遅くなります)。

<jar destfile="release.jar">
    ... my files ...
    <restrict>
        <name name="**/*.class"/>
        <archives>
            <zips>
                <filelist refid="proj.jars"/>
            </zips>
       </archives>
    </restrict>
</jar>

関連する質問はこちらにありますが、zipgroupfileset を使用しており、zip ファイル内からファイルを除外するために使用することはできません。

4

1 に答える 1

1

restrict/archive/zips バージョンの使用にかかる時間は少しおかしいです。

現在の解決策は、それらを一時ディレクトリに解凍し、zipfileset を介して含めることです。

<unjar dest="${include-in-jar.tmpdir}">
    <patternset><exclude name="**/*.MF"/></patternset>
    <path refid="include-in-jar.classpath" />
</unjar>
<war ...>
    <zipfileset dir="${include-in-jar.tmpdir}" includes="**/*" />
</war>

これには、restrict/archive/zips にかかる 40 秒とは対照的に、4 秒かかります。

于 2014-01-16T19:57:07.317 に答える