要使用javac之类的工具从源中生成包,您需要为其提供线性类路径。不幸的是,从OSGi的角度来看,它在某些情况下仍然不能完全合法:
其中具有嵌入式JAR的依赖关系;
相同的程序包包含在不同的依赖项中。
由于javac无法理解OSGi元数据,因此我只能简单地了解类路径中的依赖项。更好的包装粒度方法似乎是必要的。
人们在自动化过程中(连续集成)如何使用OSGi解决此问题?奇怪的是,在网络上有很多关于如何创建捆绑包JAR(创建元数据,创建JAR)的资源,前提是您要放入内部的类/内部JAR,但是关于如何实际编译这些类的事情很少。
让我们举个例子:我的捆绑软件需要另外两个捆绑软件进行编译,它们都包含Xerces作为嵌入式JAR,但是有两个不同且不兼容的版本。这不是问题,因为只有其中一个导出了我的捆绑包又要导入的一些xerces包。可能不是一个非常干净的情况,但是在OSGi容器中可能会发生“过时”的问题而没有问题。
现在,我该如何编译呢?我不能将这两个依赖项放在我的类路径中(javac将找不到嵌入式Xerces JAR),然后我也不能展平(两个版本的Xerces会发生冲突,也许第一个未导出的版本会发生冲突) 。如果唯一的解决方案是在包级别而不是在完整捆绑包级别上创建“类路径”,则javac根本无法使用。
最佳答案
Java类由javac编译,这意味着:为了编译包,您必须在类路径中包括您依赖的所有包。
您是对的,javac不了解OSGi。因此,您需要其他自动化工具。
要了解如何完成此操作,可以查看实现OSGi R4服务平台的Felix。
OSGi捆绑包通常由ant或maven打包,eclipse支持它们。
使用eclipse,依赖关系在项目设置选项卡“插件依赖关系”中进行配置。
如何在eclipse中设置OSGi项目的一个好例子是Sherlog
关于java - javac是否足以构建OSGi捆绑软件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2707583/