[英]Adding attributes to a jar file's manifest using Gradle
我想將一些使用Gradle 1.6構建的jar文件捆綁為Java webstart應用程序的一部分。
我現在可以使用證書正確簽名jar,並使用標准jar任務指定生成的工件的codebase
和permissions
屬性,如下所示:
jar {
manifest.attributes provider: 'tribe7.net'
manifest.attributes permissions: 'all-permissions'
manifest.attributes codebase: '*'
}
這是因為Oracle JDK / JRE中的最新Java webstart版本使這些屬性成為必需屬性,否則它會向用戶抱怨應用程序的安全性。
但是,我的工件罐子有第三方依賴(例如,slf4j),我還沒有找到一種直觀的方式將這些屬性包含在這樣的第三方罐子里。 考慮到這一點,我的最終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不會抱怨我的工件,但會對第三方罐子這樣做,因為他們顯然在他們的清單文件中沒有屬性:
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構建腳本:
感謝您的時間和幫助!
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'
)
謝謝!
要設置這些屬性,您必須解壓縮Jars,編輯清單(使用Groovy),然后重新打包Jars。 或者,您可以嘗試使用ant.jar(update = true)
覆蓋清單,但是似乎不支持覆蓋文件(不添加副本)(請參閱Ant文檔中的duplicate
屬性)。 合並罐子(以某種方式)可能是另一種選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.