我想將使用Gradle 1.6構建的一些jar文件打包爲Java webstart應用程序的一部分。使用Gradle將屬性添加到jar文件的清單
我目前正與證書正確簽名的罐子,並通過使用標準的jar任務,像這樣指定生成的工件的codebase
和permissions
屬性:
jar {
manifest.attributes provider: 'tribe7.net'
manifest.attributes permissions: 'all-permissions'
manifest.attributes codebase: '*'
}
這是因爲最新的Java Webstart的版本Oracle的JDK/JRE使這些屬性成爲強制性的,否則它會向用戶抱怨應用程序的安全性。
Preventing RIAs from Being Repurposed
然而,我的神器罐子有第三方的依賴關係(例如,SLF4J),我還沒有找到一種直觀的方式,包括在第三方罐子這些atributes。考慮到這一點,我最終在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不抱怨我的神器,但這樣做對於第三方罐子,因爲他們顯然別「T具有的屬性在他們的清單文件:
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
因爲我沒有直接控制清單生成針對第三方罐子我必須以某種方式修改目前build/webstart/lib
目錄內的清單文件,明確包括這些屬性爲了讓webstart開心。
有沒有辦法使用Gradle將屬性添加到jar文件的清單?如果任何人的興趣,這是我的搖籃構建腳本:
感謝您的時間和幫助!
UPDATE
彼得回答工作!這是更新代碼:
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'
)
謝謝!