如何防止jarsign脚本覆盖已签名的jar中的现有Manifest值?

时间:2016-04-15 08:25:57

标签: java eclipse ant jarsigner

我正在构建一个Eclipse插件,我想用签名的jar提供。

使用Eclipse UI创建更新站点并手动构建插件和功能后,我想签名创建的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>

从插件中我使用插件中提供的Manifest,如下所示:

Bundle-ManifestVersion: 2
Bundle-Name: Tomcat Manager Plugin

如何在签名时保留现有的清单?

1 个答案:

答案 0 :(得分:1)

我发现插件清单从JDK的角度来看并不是一个“真正的”清单。 JDK透视图中的清单需要具有Attribute 清单 - 版本。所以问题中的清单应该是这样的:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Tomcat Manager Plugin

如果Manifest看起来像这样,现在有明显的强制属性 Manifest-Version ,那么jarsigner就像预期的那样完成它的工作并保留现有的Manifest内容。