使用Gradle将属性添加到jar文件的清单中

Jes*_*eta 6 java security java-web-start gradle

我想将一些使用Gradle 1.6构建的jar文件捆绑为Java webstart应用程序的一部分.

我现在可以使用证书正确地签署jar,codebasepermissions使用标准jar任务指定生成的工件的属性和属性,如下所示:

jar {
    manifest.attributes provider: 'tribe7.net'
    manifest.attributes permissions: 'all-permissions'
    manifest.attributes codebase: '*'
}
Run Code Online (Sandbox Code Playgroud)

这是因为Oracle JDK/JRE中的最新Java webstart版本使这些属性成为必需属性,否则它会向用户抱怨应用程序的安全性.

防止RIA被重新利用

但是,我的工件罐子有第三方依赖(例如,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
Run Code Online (Sandbox Code Playgroud)

结果是,在运行时,webstart不会抱怨我的工件,但是对于第三方jar这样做是因为他们显然没有清单文件中的属性:

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
Run Code Online (Sandbox Code Playgroud)

由于我不直接控制第三方jar的清单生成,因此我必须以某种方式修改目录中存在的清单文件,build/webstart/lib以明确包含这些属性,以使webstart满意.

有没有办法使用Gradle向jar文件的清单添加属性?如果有人感兴趣,这是我的Gradle构建脚本:

的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'
)
Run Code Online (Sandbox Code Playgroud)

谢谢!

Pet*_*ser 4

要设置这些属性,您必须解压 Jars、编辑清单(使用 Groovy)并重新打包 Jars。或者,您可以尝试使用 覆盖清单ant.jar(update = true),尽管覆盖文件(不添加重复项)似乎不受支持(请参阅Ant 文档duplicate中的属性)。合并罐子(以一种或另一种方式)可能是另一种选择。