Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不覆盖MANIFEST.MF内容的情况下使用Ant签署OSGi包?_Java_Ant_Osgi_Jarsigner - Fatal编程技术网

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

Java 如何在不覆盖MANIFEST.MF内容的情况下使用Ant签署OSGi包?,java,ant,osgi,jarsigner,Java,Ant,Osgi,Jarsigner,我有一个Eclipse插件,我用Ant为它创建了OSGi包JAR。我想用Ant任务对它们进行签名,但这会用类签名覆盖MANIFEST.MF内容,使OSGi捆绑包无法使用。JDK jarsigner工具具有相同的行为。EclipsePDE似乎有这个功能,但据我所知,您只能在Eclipse中使用它。我希望能够从命令行运行我的Ant构建。有人知道一种简单的方法将类签名附加到MANIFEST.MF而不是覆盖它吗?我认为默认情况下不会覆盖MANIFEST。请遵守以下控制台脚本: $ touch MyMai

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

我认为默认情况下不会覆盖MANIFEST。请遵守以下控制台脚本:

$ 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=

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

我再次尝试,但MANIFEST.MF仍然被覆盖。不过我使用的是Windows XP。我被难倒了,现在它可以工作了。创建罐子时可能出了问题。您的清单是什么样子的?我想知道清单中的OSGi包声明是否被jarsigner的重写。