【问题标题】:How can I sign an OSGi bundle with Ant without overwriting the MANIFEST.MF contents?如何在不覆盖 MANIFEST.MF 内容的情况下使用 Ant 签署 OSGi 包?
【发布时间】:2010-12-25 01:18:43
【问题描述】:

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

【问题讨论】:

    标签: java ant osgi jarsigner


    【解决方案1】:

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

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

    【讨论】:

    • 我又试了一次,我的 MANIFEST.MF 仍然被覆盖。不过我在 Windows XP 上。
    • 我很难过,现在可以了。可能在创建 JAR 时出了点问题。
    • 您的清单是什么样的?我想知道清单中的 OSGi 包声明是否被 jarsigner 覆盖。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-25
      • 1970-01-01
      • 2022-12-16
      • 2018-05-05
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      相关资源
      最近更新 更多