Karaf:两个不同的特性依赖于不同版本的同一个库

Karaf: two different features depend on same library with different versions

<feature name="featureA" version="1.1.8">
    <bundle start-level="80">mvn:org.antlr/antlr4-runtime/4.5.3</bundle>
</feature>
<feature name="featureB" version="1.1.8">
    <bundle start-level="80">wrap:mvn:org.antlr/antlr4-runtime/4.0</bundle>
</feature>

我有两个使用 antlr4-runtime 的功能,但它的版本不同。在运行时 类 for antlr 从 4.5.3 版本加载这两个功能。我们能否以某种方式配置 karaf 以将同一个库的一个版本用于一项功能,而将另一个版本用于第二项功能?

无需对 Karaf 容器进行显式配置。在构建捆绑包时,您需要在消费捆绑包(使用的捆绑包)中提及特定版本(antlr 捆绑包)。由于 karaf(OSGi 容器)接受不同版本的相同包的部署。这是 OSGI 容器的主要优势之一。

您应该看看您的功能中的其他 jar。在你的 jars 的清单文件中,如果你声明对来自 org.antlr 4.0 的包的依赖,这意味着版本 4.0 是适合的最低版本,因此版本 4.5.3 也适合。如果您需要更多信息,可以查看此页面:osgi-version