2

要使用 javac 等工具从源代码生成包,您需要为其提供线性类路径。不幸的是,从 OSGi 的角度来看,它在某些仍然完全合法的情况下不起作用:

  • 嵌入 JAR 的依赖项;

  • 不同依赖项包含的相同包。

由于 javac 不理解 OSGi 元数据,我将无法简单地了解类路径中的依赖关系。一种更精细的包粒度方法似乎是必要的。

人们如何在自动化过程(持续集成)中使用 OSGi 来解决这个问题?奇怪的是,网上有很多关于如何创建捆绑 JAR(创建元数据,创建 JAR)的资源,前提是你有要放入的类/内部 JAR,但关于如何实际编译这些类的内容却很少。

举个例子:我的包需要另外两个包来编译,它们都包含作为嵌入式 JAR 的 Xerces,但有两个不同且不兼容的版本。这不是问题,因为其中只有一个会导出一些 xerces 包,而我的包又会导入。可能不是一个非常干净的情况,但是可以在 OSGi 容器中“合法”发生的事情没有问题。

现在,我该如何编译它?我无法将这两个依赖项放在我的类路径中(javac 找不到嵌入式 Xerces JAR),我也无法展平(两个版本的 Xerces 将发生冲突,可能未导出的版本会是第一个) . 如果唯一的解决方案是在包级别而不是在完整的捆绑规模上创建“类路径”,那么 javac 根本不可用。

4

2 回答 2

0

Java 类是由 javac 编译的,这意味着:为了编译一个包,你必须在类路径中包含你依赖的所有包。你说得对,javac 不知道 OSGi。因此,您需要其他自动化工具。

要了解这是如何实现的,您可以查看实现 OSGi R4 服务平台的Felix 。

OSGi 包通常由 ant 或 maven 打包,eclipse 支持它们。使用 Eclipse 依赖项在项目设置选项卡“插件依赖项”中配置。

如何在 Eclipse 中设置 OSGi 项目的一个很好的例子是Sherlog

于 2010-04-25T08:52:35.783 回答
0

需要 Javac 才能将任何 java 文件构建到类文件中。OSGI 捆绑包与任何其他 java 捆绑包档案一样,是类文件的集合和清单,其中包含 JAR 文件中的几个强制性的自我解释条目。

如果您希望您的包正常运行,那么它必须满足其所有依赖项。如果您希望导出它的一些服务或类,那么您还必须以类似的方式声明它们。一旦您理解了这些概念,存档中的 OSGI 特定标头就会变得有意义。

于 2010-04-25T08:58:50.697 回答