为什么让我的项目成为OSGI包而不是标准的JAR包?

时间:2010-11-15 01:29:22

标签: java eclipse osgi

出于什么原因,我想让我的项目成为OSGI包而不仅仅是标准的JAR包?它是否仅适用于使用OSGI框架的应用程序(例如:Equinox / Eclipse)?或者从开发的角度来看它是否有用,即:在Eclipse开发期间能够轻松地重用其他项目的OSGI包吗?

5 个答案:

答案 0 :(得分:3)

OSGi为模块提供支持,您可以控制依赖项。每个模块可以包括和排除来自其他包的包。您还可以在运行时替换捆绑包。使整个项目成为一个捆绑包没有这些好处。如果它不能作为OSGi包使用,我只会将类似jdbc驱动程序的jar包装为bundle。 首先检查您的项目是否会带来好处。然后确定哪些模块应该是捆绑。

答案 1 :(得分:3)

如果您的项目是公共或开源库,那么确实将其作为OSGi包。这对可能想要使用您的库的OSGi开发人员有很大帮助。

另一方面,如果您的图书馆是私有的,那么OSGify的好处是有限的。如果您决定稍后战略性地采用OSGi,那么这将是一个优势。您也可以从显式依赖项中获得一些好处,即您可以查看该包以确切了解它所依赖的内容。

这样做没有运行时成本。清单中的OSGi数据被非OSGi运行时忽略。

您必须在构建步骤中生成OSGi清单。最好的工具是Bnd,它可以很容易地集成到任何ANT构建中 - 用它来代替“JAR”任务。如果您使用Maven构建,则使用Maven Bundle插件(内部使用Bnd)。

答案 2 :(得分:1)

只有在您提到的OSGi容器中使用它时才有用。

如果你正在寻找答案,为什么它一般有用,你可以通过谷歌搜索找到很多东西 - 从维基百科开始:

总的来说,我认为OSGi的主要好处是封装/版本控制,解决框架提供的JAR地狱和管理,根据您的项目,这可能是您可能感兴趣也可能不感兴趣。

我明确建议您阅读OSGi,如果您还没有 - 这是非常有趣的技术。我建议阅读Neil Bartlett关于Ec​​lipseZone的文章 - 这是第一篇:

其中有很多,所以google他们 - 非常有趣的阅读,这也会让你知道这是否是你应该考虑的事情。

SpringSource是OSGi的重要支持者,因此值得一看:

答案 3 :(得分:0)

如果您计划在OSGi上下文中使用它,那么您也可以将其作为捆绑包。我不知道将它变成捆绑包会有任何负面影响,而如果你没有把它变成捆绑包并稍后发现你需要它,那么你可能不得不回去修复它。除此之外我个人不知道OSGi以外的任何使用清单元信息的东西 - 但就像我说的那样;我觉得它不会受到伤害。

答案 4 :(得分:0)

OSGIfying项目将允许OSGI用于Eclipse中的依赖项管理,而不是标准的Eclipse项目构建机制,或者外部依赖管理工具,如Ivy或Maven。将项目转换为OSGI包允许您将该项目的包依赖关系表示为包依赖关系(如果存在包依赖关系的包),这将由OSGI框架而不是其他机制(标准Eclipse项目构建/ Ivy / Maven)处理)。

通过在项目的构建路径上指定其他项目和库来建立标准Eclipse项目依赖项。转换为OSGI将使用MANIFEST.MF import-package或required-bundles声明替换构建路径引用。

使用OSGI进行依赖管理而不是标准eclipse机制的优点是:

  • 重新导出依赖关系:您的捆绑包可以重新导出其依赖包,这意味着依赖于您的捆绑包的代码也不必依赖您的捆绑包的依赖项(如果它也使用它们)
  • 版本管理:因此您可以指定依赖项的最小和最大预期版本。

另见Should I use Eclipse plug-ins (or OSGi Bundles) as a plain dependency management tool?