8

Java webstart アプリケーションの一部として、Gradle 1.6 でビルドされたいくつかの jar ファイルをバンドルしたいと考えています。

現在、証明書を使用して jar に正しく署名し、次のように標準の jar タスクを使用して、生成されたアーティファクトの属性をcodebase指定できます。permissions

jar {
    manifest.attributes provider: 'tribe7.net'
    manifest.attributes permissions: 'all-permissions'
    manifest.attributes codebase: '*'
}

これは、Oracle の JDK/JRE の最新の Java Webstart バージョンがこれらの属性を必須にするか、アプリケーションのセキュリティについてユーザーに不平を言うためです。

RIA の転用防止

ただし、アーティファクト jar にはサード パーティの依存関係 (slf4j など) があり、そのようなサード パーティの jar にこれらの属性を含める直感的な方法をまだ見つけていません。これを念頭に置いて、私の最終的な webstart アプリケーション構造は次のようになります。

./build/webstart/my.jnlp
./build/webstart/lib/myartifactA-1.00.jar
./build/webstart/lib/myartifactB-1.00.jar
./build/webstart/lib/myartifactC-1.00.jar
./build/webstart/lib/slf4j-api-1.7.5.jar

その結果、実行時に webstart は私のアーティファクトについては文句を言いませんが、サードパーティの jar についてはそうします。これは明らかにマニフェスト ファイルに属性がないためです。

Missing Codebase manifest attribute for:    file:/C:/build/webstart/lib/slf4j-api-1.7.5.jar
Missing Permissions manifest attribute for: file:/C:/build/webstart/lib/slf4j-api-1.7.5.jar
Missing Codebase manifest attribute for:    file:/C:/build/webstart/lib/slf4j-simple-1.7.5.jar
Missing Permissions manifest attribute for: file:/C:/build/webstart/lib/slf4j-simple-1.7.5.jar

私はサードパーティの jar のマニフェスト生成を直接制御していないため、build/webstart/libディレクトリ内にあるマニフェスト ファイルを何らかの形で変更して、それらの属性を明示的に含めて、webstart を満足させる必要があります。

Gradleでjarファイルのマニフェストに属性を追加する方法はありますか? 興味のある方のために、これは私の Gradle ビルド スクリプトです。

build.gradle

お時間をいただきありがとうございます。

アップデート

ピーターの答えはうまくいきました!これは更新されたコードです:

ant.jar(destfile: it, update: true) {
  delegate.manifest {
    attribute(name: 'permissions', value: 'all-permissions')
    attribute(name: 'codebase', value: '*')
  }
}

ant.signjar(
  destDir: webstartSignedLibPath,
  alias: project.getProperty('jarsign.keystore.alias'),
  jar: it,
  keystore: project.getProperty('jarsign.keystore.path'),
  storepass: project.getProperty('jarsign.keystore.password'),
  preservelastmodified: 'true'
)

ありがとう!

4

1 に答える 1

4

これらの属性を設定するには、Jar をアンパックし、(Groovy を使用して) マニフェストを編集し、Jar を再パックする必要があります。または、マニフェストをant.jar(update = true)で上書きすることもできますが、(重複を追加せずに) ファイルを上書きすることはサポートされていないようです ( Ant docsduplicateの属性を参照してください)。Jar を (何らかの方法で) マージすることは、別のオプションかもしれません。

于 2013-07-25T01:30:43.177 に答える