9

私のJARファイルはwebstartアプリケーション用に署名されている必要があります。ダウンロード時間を最小限に抑えるために、それらもパックしておくと便利です。アプリケーションのデプロイ中に自動的に実行するようにAntタスクを構成しようとしています。パックプロセスは署名を無効にするjar内部構造を再編成するため、Pack200ドキュメントでは3ステップのプロセスを推奨しています。

  1. JARをpack200で再梱包します
  2. jarsignerでJARに署名します
  3. .jar.pack.gzファイルを生成するpack200でJARjarを圧縮します

Antにはデフォルトのsignjarタスクがあり、SunはPack200antタスクを公開しました。

問題は、Sun pack200タスクが一度に1つのファイルを操作するだけであり、再パック操作で出力ファイルを指定する必要があることです。

かなり一般的な操作だと思いますが、antファイルが複雑になりすぎて一時ファイルが多すぎます。コミュニティの知恵を請う時間:

すべてのJARファイルをパックして署名する簡単な方法または少なくとも標準的な方法はありますか?

4

3 に答える 3

10

これが私自身の解決策です。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}" />

次に、上からのタグを付けます。これにより、各ファイルの最終的なパッキングが行われます。

于 2010-08-17T22:35:08.287 に答える
1

signjarタスク内でファイルセットを使用できます

<signjar alias="ws" keypass="wskey"
                 storepass="wspass" keystore="${artifact.root.dir}/deployJAWS.key">
            <fileset dir="${lib.temp.root.dir}">
                <include name="**/*.jar" />
            </fileset>
</signjar>

上記のスニペットを使用して、約70個のjarファイルで構成されるWebStartアプリケーションに署名します

于 2010-08-16T07:51:34.113 に答える
1

Java.netのPack200タスクは、ファイルセットで動作するように更新されました。もう一度試してください:

http://java.net/projects/deployment

于 2011-08-04T12:49:41.363 に答える