我正在构建一个Eclipse插件,我想用签名的jar来交付它。
在使用EclipseUI创建更新站点并手动构建插件和功能之后,我想对创建的jar进行签名。
这样做会导致jar中的清单丢失其OSGI元信息属性,从而导致在重新启动eclipse后找不到插件。Jars的清单中只剩下签名信息。
我使用这个片段来对工件进行签名,但我也可以使用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>
从插件中,我使用插件中提供的Manifests,如下所示:
Bundle-ManifestVersion: 2
Bundle-Name: Tomcat Manager Plugin
如何在签名时保留现有清单?
从JDK的角度来看,我发现插件Manifest不是"真正的"Manifest。JDK视角下的Manifest需要具有Attribute清单版本在里面。所以问题中的清单应该是这样的:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Tomcat Manager Plugin
如果Manifest看起来是这样的,并且现在具有明显的强制属性Manifest Version,则jarsigner会像预期的那样完成其工作,并保留现有的Manifest内容。