OSGI - 由包需要处理的第三方JAR文件(OSGI - handling 3rd party

2019-06-21 05:03发布

我刚开始接触OSGI发展,我在努力了解如何最好地处理相关的JAR。

也就是说,如果我创建一个包的情形产生的是,我将需要使用一些第三方的JAR文件。 当我创建我的包JAR部署到OSGI,显然这些第三方JAR文件不包括在内,因此包将无法运行。

据我所知,一个选择是把这些JAR成束,并将它们部署到OSGi容器。 但是,如果他们只需要通过一个包可以使用这似乎并不理想。

什么是对此最好的解决方案? 可以在JAR文件被嵌入捆绑JAR中如果是这样,这是一个合理的做法?

Answer 1:

我几乎总是分开捆绑每个罐子。 OSGi的本身是为模块化,您不这样做,把整个系统归谬法。

如果你想JAR文件转换成捆你可能想使用由彼得柯瑞恩斯书面BND工具 。 但首先,我建议你看看在捆绑SpringSource的企业捆绑库 ,如果他们还没有为你做过的工作。



Answer 2:

您可以通过添加第三方罐子捆jar文件的根目录,然后添加一个包类路径头的包的清单,如包括你的包内第三方的jar:

Bundle-ClassPath: .,my3rdparty.jar

如果您想将第三方坛子的子目录,指定路径,而不使用标题./,

Bundle-ClassPath: .,lib/my3rdparty.jar # (not ./lib/my3rdparty.jar)


Answer 3:

有可能嵌入非OSGi的依赖关系成束。

一个简单的方法做,这是使用Maven来管理你的依赖和Maven的捆绑插件来建立你的包。 看一看在<Embed-Dependency><Embed-Transitive> Maven的捆绑插件的指令的部分中所述嵌入的依赖关系的插件文档页面。

罗兰指出,这不是相对于一个理想的解决方案的OSGi的意图,即,模块化和各个模块的重用。 然而,它可能是暂时直到第三方的依赖关系可以转化为OSGi包务实的解决方案。



Answer 4:

这个线程是有点老了,但我想指出嵌入依赖的限制之一。 回想一下,依赖关系是在罐子的水平,但是当你导出包有些人可能需要来自嵌入的依赖关系。 如果发生这种情况,你会出现重复的课程,在顶层包一个内联和其他嵌入式罐子。 当然,你可以内联整个嵌入式罐子,但是你要知道在此之前传播跨越整个依赖链。 这仅仅是罗兰等人指的是问题之一。



Answer 5:

这是,如果你使用的是一个例子的Maven插件捆绑 。

注意:这个插件会自动导入你的依赖需要的包。 这可能会或可能不会是一个问题。 值得庆幸的是,你可以抑制你并不真的需要进口(见下文)的软件包。

    <Import-Package>
        <!-- this was imported by one of the dependencies; I don't really need it -->
        !org.apache.jackrabbit.test,
        *
    </Import-Package>
    <Include-Resource>
        lib/concurrent-1.3.4.jar,
        lib/jackrabbit-core-2.6.5.jar,
        lib/jackrabbit-spi-2.6.5.jar,
        lib/jackrabbit-spi-commons-2.6.5.jar,
        lib/lucene-core-3.6.0.jar,
        lib/tika-core-1.3.jar
    </Include-Resource>
    <Bundle-ClassPath>
        .,
        concurrent-1.3.4.jar,
        jackrabbit-core-2.6.5.jar,
        jackrabbit-spi-2.6.5.jar,
        jackrabbit-spi-commons-2.6.5.jar,
        lucene-core-3.6.0.jar,
        tika-core-1.3.jar
    </Bundle-ClassPath>


Answer 6:

我们可以使用OSGI覆盖在运行时加载的类加载器引导坛子里一样,如果我们想要覆盖可提供Java7到JAXP1.6 JAXP1.4.5,有-Dendorese功能覆盖默认的API来升级API。 我们能做到这件事情与OSGI的帮助。



文章来源: OSGI - handling 3rd party JARs required by a bundle
标签: java jar osgi