要使用 javac 等工具从源代码生成包,您需要为其提供线性类路径。不幸的是,从 OSGi 的角度来看,它在某些仍然完全合法的情况下不起作用:
嵌入 JAR 的依赖项;
不同依赖项包含的相同包。
由于 javac 不理解 OSGi 元数据,我将无法简单地了解类路径中的依赖关系。一种更精细的包粒度方法似乎是必要的。
人们如何在自动化过程(持续集成)中使用 OSGi 来解决这个问题?奇怪的是,网上有很多关于如何创建捆绑 JAR(创建元数据,创建 JAR)的资源,前提是你有要放入的类/内部 JAR,但关于如何实际编译这些类的内容却很少。
举个例子:我的包需要另外两个包来编译,它们都包含作为嵌入式 JAR 的 Xerces,但有两个不同且不兼容的版本。这不是问题,因为其中只有一个会导出一些 xerces 包,而我的包又会导入。可能不是一个非常干净的情况,但是可以在 OSGi 容器中“合法”发生的事情没有问题。
现在,我该如何编译它?我无法将这两个依赖项放在我的类路径中(javac 找不到嵌入式 Xerces JAR),我也无法展平(两个版本的 Xerces 将发生冲突,可能未导出的版本会是第一个) . 如果唯一的解决方案是在包级别而不是在完整的捆绑规模上创建“类路径”,那么 javac 根本不可用。