2013-07-25 136 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属性)。合并罐子(以这种或那种方式)可能是另一种选择。

相关问题