代码之家  ›  专栏  ›  技术社区  ›  Chris K

OSGi包清单中包类路径的字符限制?

  •  2
  • Chris K  · 技术社区  · 14 年前

    使用ApacheFelix,我编写了一个OSGi组件,它封装了我公司使用的一些中间件。目前它依赖于大量的外部库,而且我似乎在Bundle类路径上遇到了一个限制:参数长度。我不得不将commons-collections.jar等库重命名为ccoll.jar。

    我很好奇是否有人对如何克服这个限制有什么建议?

    Bundle-ClassPath: .,lib/log4j.jar,lib/cvfs.jar,lib/backport.jar,lib/cbeanutils.jar,lib/ccodec.jar,lib/ccoll.jar,lib/chttp.jar,lib/cjxpath.jar,lib/clang.jar,[libs redacted],lib/saaj-api.jar,lib/saaj-impl.jar,lib/Schemas.jar,lib/xbean.jar,lib/clog.jar,lib/dom4j.jar,lib/xml-apis.jar,lib/xerces.jar,lib/xalan.jar,lib/jaxp-ri.jar,lib/japi.jar,lib/mail.jar
    

    我想我可以通过去掉lib/位来获得更多的字符,但是我很好奇这是一个bug,一个定义的限制,还是仅仅是我的白痴。

    5 回复  |  直到 14 年前
        1
  •  9
  •   Moritz    14 年前

    清单行长度限制为72字节,如中所述 http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html . 之后,你将不得不分割线,并开始一个新的开始与一个空格字符。在这种情况下:

    Bundle-ClassPath: .,lib/log4j.jar,lib/cvfs.jar,lib/backport.jar,lib/cbea
     nutils.jar,lib/ccodec.jar,lib/ccoll.jar,lib/chttp.jar,lib/cjxpath.jar,l
     ib/clang.jar,[libs redacted],lib/saaj-api.jar,lib/saaj-impl.jar,lib/Sch
     emas.jar,lib/xbean.jar,lib/clog.jar,lib/dom4j.jar,lib/xml-apis.jar,lib/
     xerces.jar,lib/xalan.jar,lib/jaxp-ri.jar,lib/japi.jar,lib/mail.jar
    

        2
  •  4
  •   Community CDub    8 年前

    有,就像 Moritz says ,一个 72-byte limit 每行。

    爪哇 jar

    Manifest manifest = new Manifest();
    Attributes attributes = manifest.getMainAttributes();
    attributes.put(Attributes.Name.MANIFEST_VERSION, "1.0");
    attributes
        .putValue(
            "Bundle-Classpath",
            "<snip>");
    manifest.write(System.out);
    

    注: Manifest-Version 是强制性的。

    Manifest-Version: 1.0
    Bundle-Classpath: .,lib/log4j.jar,lib/cvfs.jar,lib/backport.jar,lib/cb
     eanutils.jar,lib/ccodec.jar,lib/ccoll.jar,lib/chttp.jar,lib/cjxpath.j
     ar,lib/clang.jar,[libsredacted],lib/saaj-api.jar,lib/saaj-impl.jar,li
     b/Schemas.jar,lib/xbean.jar,lib/clog.jar,lib/dom4j.jar,lib/xml-apis.j
     ar,lib/xerces.jar,lib/xalan.jar,lib/jaxp-ri.jar,lib/japi.jar,lib/mail
     .jar
    
        3
  •  3
  •   Tassos Bassoukos    14 年前

    另外,考虑将第三方库打包到它们自己的包中,有些甚至可以使用osgi。

        4
  •  2
  •   FrVaBe    14 年前

    http://wiki.apache.org/commons/CommonsOsgi http://www.springsource.com/repository/app/ 如果他们已经绑定了你的第三方库。

    独立安装这些包,不要将它们嵌入包中。

        5
  •  1
  •   Neil Bartlett    14 年前

    首先,不要直接编辑 MANIFEST.MF . 例如,在标准文本文件中编辑它 mymanifest.txt ,然后传递到 jar 命令如下:

    jar cfm output.jar mymanifest.txt <other files>
    

    这个 然后,工具将根据需要插入管路护套。

    更好的答案 :使用 Bnd

    也正如其他评论者所指出的,将这些库用作OSGi包要好得多。将所有依赖项粘贴到一个bundle中有点缺少OSGi的要点。