如何在不覆盖MANIFEST.MF内容的情况下使用Ant签署OSGi包?

时间:2009-12-09 23:05:27

标签: java ant osgi jarsigner

我有一个Eclipse插件,我使用Ant创建了OSGi包JAR。我想用Ant任务签名,但是用类签名覆盖MANIFEST.MF内容,使得OSGi包无法使用。 JDK jarsigner工具具有相同的行为。 Eclipse PDE似乎具有该功能,但据我所知,您只能在Eclipse中使用它。我希望能够从命令行运行我的Ant构建。有没有人知道将类签名附加到MANIFEST.MF而不是覆盖它的简单方法?

2 个答案:

答案 0 :(得分:2)

我认为默认情况下不会覆盖清单。请注意以下控制台脚本:

$ touch MyMainClass.class

$ echo 'Main-Class: MyMainClass' > MyManifest

$ jar cvmf MyManifest myjar.jar MyMainClass.class
added manifest
adding: MyMainClass.class(in = 0) (out= 0)(stored 0%)

$ unzip -c myjar.jar META-INF/MANIFEST.MF
Archive:  myjar.jar
  inflating: META-INF/MANIFEST.MF
Manifest-Version: 1.0
Created-By: 1.6.0_17 (Apple Inc.)
Main-Class: MyMainClass

$ jarsigner myjar.jar mykeyid
Enter Passphrase for keystore:

$ unzip -c myjar.jar META-INF/MANIFEST.MF
Archive:  myjar.jar
  inflating: META-INF/MANIFEST.MF
Manifest-Version: 1.0
Created-By: 1.6.0_17 (Apple Inc.)
Main-Class: MyMainClass
Name: MyMainClass.class
SHA1-Digest: 2jmj7l5rSw0yVb/vlWAYkK/YBwk=

答案 1 :(得分:2)

这似乎是一个JDK问题。使用1.5.0_16,jarsigner会覆盖我现有的MANIFEST.MF,但使用1.6.0_13一切正常。