2010-04-25 35 views
2

要使用诸如javac之类的工具从源代码生成包,您需要为其提供线性类路径。不幸的是,它不会在某些情况下,从一个角度OSGi的点工作仍完全合法:javac是否足以构建OSGi包?

  • 依赖与他们嵌入JAR;

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

因为javac不理解OSGi元数据,所以我不能简单地只是在类路径中的依赖关系。更好的包装纹理方法似乎是必要的。

在自动化过程(持续集成)中使用OSGi的人如何解决这个问题?奇怪的是,Web上有很多关于如何创建bundle JAR(创建元数据,创建JAR)的资源,前提是您需要将类/内部JAR放入其中,但关于如何实际获取这些类的信息很少。

让我们举个例子:我的包需要两个其他包来编译,它们都包含Xerces作为嵌入式JAR,但是包含两个不同和不兼容的版本。这不是一个问题,因为只有其中一个导出一些xerces包,我的包依次导入。也许不是一个很干净的情况,但是可以在OSGi容器中“有法可依”地发生的事情没有问题。

现在,我该如何编译它?我不能把这两个依赖关系放在我的类路径中(javac中不会找到嵌入的Xerces JAR),我也不能将它们弄平(两个版本的Xerces会发生碰撞,也许没有导出的将是第一个) 。如果ony解决方案是在包级别创建“classpath”,而不是完整的包级别,则javac根本不可用。

回答

0

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

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

OSGi包通常由eclipse支持的ant或maven打包。 使用eclipse在项目设置选项卡“plugin-dependencies”中配置依赖关系。

一个很好的例子,如何建立在Eclipse OSGi的项目是Sherlog

0

javac的是建立任何Java文件到一个类文件要求。 OSGI捆绑包就像任何其他的Java绑定归档文件一样,包含一系列类文件和一个清单,其中包含JAR文件中的几个强制性自解释条目。

如果你想让你的bundle正常工作,那么它必须满足它的所有依赖。如果您希望导出其某些服务或类别,则还必须以类似的方式声明这些服务或类别。一旦理解了这些概念,归档文件中的OSGI特定头文件就有意义。

+0

也许我错了,但创造了应付的OSGi(m2eclipse的或来自菲利克斯一个)Maven插件仍然依靠的javac到底,给它一个线性的classpath喂上。 – Chatanga 2010-04-25 12:35:11