これが私自身の解決策です。prebuild ant ターゲットを破棄し、pack200実行可能ファイルを直接実行することにしました。
このアプローチにはいくつかの利点があります。
- それは機能します(jarsignerはいくつかのjarの検証に失敗していました)
- jdk以外の依存関係はありません
- すでに再梱包された瓶を再梱包するのに多くの時間を費やすことはありません
- ファイルにインラインで署名して再パックできるため、署名されたバージョンをバージョン管理下に置くことができます。2回署名する必要はありません。
インラインで再パックして署名するマクロのコードは次のとおりです。
<macrodef name="repack-and-sign">
<attribute name ="rootdir"/>
<sequential>
<echo message="Repacking libs in @{rootdir}"/>
<apply executable="pack200" parallel="false">
<arg value="--repack"/>
<arg value="--segment-limit=-1"/>
<fileset dir="@{rootdir}" includes="**/*.jar" />
</apply>
<echo message="Signing libs in @{rootdir}"/>
<signjar
alias="${keystore.alias}" keystore="${keystore.file}" storepass="${keystore.password}"
lazy="true">
<path>
<fileset dir="@{rootdir}" includes="**/*.jar" />
</path>
</signjar>
</sequential>
</macrodef>
そして、ここに梱包する方法があります:
<apply executable="pack200" parallel="false" dest="${dir.tomcat.jar}">
<arg value="--modification-time=latest"/>
<arg value="--deflate-hint=true"/>
<arg value="--segment-limit=-1"/>
<targetfile/>
<srcfile/>
<fileset dir="${dir.tomcat.jar}" includes="**/*.jar" />
<mapper type="glob" from="*" to="*.pack.gz" />
</apply>
アリをあまりよく知らない人のためにもう少し情報を提供するために編集されました:
上記のタスクは、タグの前に実行されます。タグ内で、最初に次のようなマクロを呼び出して、各ファイルを最初に再パックして署名します。
<repack-and-sign rootdir="${dir.tomcat.jar}" />
次に、上からのタグを付けます。これにより、各ファイルの最終的なパッキングが行われます。