2016-04-15 84 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,它的工作像預期,並保留現有的清單內容。