2013-07-25 112 views
6

我想將使用Gradle 1.6構建的一些jar文件打包爲Java webstart應用程序的一部分。使用Gradle將屬性添加到jar文件的清單

我目前正與證書正確簽名的罐子,並通過使用標準的jar任務,像這樣指定生成的工件的codebasepermissions屬性:

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文件的清單?如果任何人的興趣,這是我的搖籃構建腳本:

build.gradle

感謝您的時間和幫助!

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' 
) 

謝謝!

回答

4

要設置這些屬性,您必須解壓縮Jars,編輯清單(使用Groovy)並重新打包Jars。或者,您可以嘗試使用ant.jar(update = true)覆蓋清單,但覆蓋文件(不添加副本)似乎不受支持(請參閱Ant docs中的duplicate屬性)。合併罐子(以這種或那種方式)可能是另一種選擇。

相關問題