我想将使用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'
)
谢谢!