2016-04-15 82 views
1

我正在构建一个Eclipse插件,我想用带签名的jar包来交付。如何防止jarsign脚本覆盖已签名jar中的已有Manifest值?

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

从我使用所提供的舱单从插件这样一个插件:

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

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

+0

您可以使用eclipse.jarsigner ant任务。我们把它用在我们的项目上,它像yolu一样工作。我没有关于jarsigner任务的信息。也许它也有一个属性行keepmanifest或useexistingmanifes ... – guleryuz

+0

我不知道你的意思是与eclipse.jarsigner蚂蚁任务。我使用ant自身提供的默认ant任务进行jarsigning:https://ant.apache.org/manual/Tasks/signjar.html – Markus

+0

抱歉,任务名称是eclipse.jarProcessor,它具有jar签名属性。 sign =“true”会在点击现有清单的同时在jar上签名 – guleryuz

回答

1

我发现从JDK的角度来看,插件Manifest并不是一个“真实”的Manifest。来自JDK透视图的Manifest需要在其中具有属性 Manifest-Version。因此,从问题的清单应该是这样的:

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

如果舱单这个样子的,现在有明显的强制属性清单-版的的jarsigner,它的工作像预期,并保留现有的清单内容。