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 バージョンがこれらの属性を必須にするか、アプリケーションのセキュリティについてユーザーに不平を言うためです。
ただし、アーティファクト 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 ビルド スクリプトです。
お時間をいただきありがとうございます。
アップデート
ピーターの答えはうまくいきました!これは更新されたコードです:
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'
)
ありがとう!