我正在构建一个 Eclipse 插件,我想用签名的 jar 来交付它。
使用 Eclipse UI 创建更新站点并手动构建插件和功能后,我想对创建的 jar 进行签名。
这样做会导致 jar 中的 list 丢失其 OSGI 元信息属性,从而在重新启动 eclipse 后找不到插件。 Jars 的 list 中仅保留签名信息。
我使用此代码片段对工件进行签名,但我也可以使用 JDK 工具 jarsign 重现此行为:
<signjar alias="${keystore.alias}" keystore="${keystore}"
storepass="${keystore.password}"
lazy="true" tsaurl="http://time.certum.pl/">
<path>
<path refid="plugins"/>
<path refid="features"/>
</path>
</signjar>
在插件中,我使用插件提供的 list ,如下所示:
Bundle-ManifestVersion: 2
Bundle-Name: Tomcat Manager Plugin
如何在签名时保留现有 list ?
最佳答案
我发现从 JDK 的角度来看,插件 Manifest 并不是“真正的”Manifest。从 JDK 角度来看,Manifest 需要具有 Attribute 其中的 list 版本。因此问题的 list 应如下所示:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Tomcat Manager Plugin
如果 Manifest 看起来像这样,并且现在具有明显的强制属性 Manifest-Version,则 jarsigner 会按预期完成其工作并保留现有的 Manifest 内容。
关于java - 如何防止 jarsign 脚本覆盖已签名 jar 中的现有 list 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36641965/