Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向jar文件添加属性';使用Gradle的清单_Java_Security_Gradle_Java Web Start - Fatal编程技术网

Java 向jar文件添加属性';使用Gradle的清单

Java 向jar文件添加属性';使用Gradle的清单,java,security,gradle,java-web-start,Java,Security,Gradle,Java Web Start,我想捆绑一些用Gradle1.6构建的jar文件,作为JavaWebStart应用程序的一部分 我目前可以使用证书对jar进行正确签名,并通过使用标准jar任务为生成的工件指定codebase和permissions属性,如下所示: jar { manifest.attributes provider: 'tribe7.net' manifest.attributes permissions: 'all-permissions' manifest.attributes c

我想捆绑一些用Gradle1.6构建的jar文件,作为JavaWebStart应用程序的一部分

我目前可以使用证书对jar进行正确签名,并通过使用标准jar任务为生成的工件指定
codebase
permissions
属性,如下所示:

jar {
    manifest.attributes provider: 'tribe7.net'
    manifest.attributes permissions: 'all-permissions'
    manifest.attributes codebase: '*'
}
这是因为Oracle的JDK/JRE中最新的Java webstart版本强制要求这些属性,否则它会向用户抱怨应用程序的安全性

然而,我的工件jar具有第三方依赖性(例如,slf4j),我还没有找到一种直观的方法将这些atributes包含在这样的第三方jar中。考虑到这一点,我的最终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不会抱怨我的工件,而是抱怨第三方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
由于我不直接控制第三方JAR的清单生成,因此我必须以某种方式修改
build/webstart/lib
目录中的清单文件,以明确包含这些属性,从而使webstart满意

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

谢谢你的时间和帮助

更新

彼得的回答奏效了!这是更新的代码:

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

谢谢

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