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

标签 java eclipse ant jarsigner

我正在构建一个 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/

相关文章:

eclipse - 哪个版本的 OSGi 由哪个版本的 Eclipse/Equinox 实现?

java - 合并多个构建时代码覆盖率错误

java - 在 Java 中,接收器到底是什么或者接收器到底可以是什么?

java - 使用单击事件隐藏 JTable 行 [ java ]

java - 有没有办法在不应用存储库基类的情况下使用存储库?

java - Eclipse RCP : How to programmatically get Problems View records

java - 是否可以在 myeclipse 中安装 apache derby eclipse 插件?

java - Controller 返回包含两个实体而不是一个实体的 JSON

ant - 从 ditamap 创建 MERGED 文件然后过滤它

java - 在哪里可以下载官方 Mockito jar 文件以与 Eclipse 中的 Apache ant 项目一起使用?