【问题标题】:Is javac enough to build an OSGi bundle?javac 是否足以构建 OSGi 包?
【发布时间】:2011-02-12 01:11:21
【问题描述】:

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

  • 内嵌 JAR 的依赖项;

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

由于 javac 不理解 OSGi 元数据,我不能简单地理解类路径中的依赖关系。似乎有必要采用更精细的包粒度方法。

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

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

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

【问题讨论】:

    标签: java classpath osgi javac


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 也许我错了,但为应对 OSGi(m2eclipse 或 Felix 的那个)而创建的 Maven 插件最终仍然依赖于 javac,从而为其提供了一个线性类路径。跨度>
      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多