【问题标题】:OSGi (Karaf) Resolution vs Maven dependenciesOSGi (Karaf) 解析 vs Maven 依赖
【发布时间】:2016-05-10 16:37:53
【问题描述】:

在下面的示例中,在 OSGi 解析和 Maven 依赖项支持所需的步骤中似乎存在差异/重复。

我有一个依赖于外部 3rd 方 jar 的 jar,在本例中为 time4j。

<dependency>
  <groupId>net.time4j</groupId>
  <artifactId>time4j-core</artifactId>
  <version>4.16</version>
</dependency>

然后我可以通过导入包和运行等在本地运行我的简单 jar。

导入 OSGi 时,我必须确保首先导入此 jar,通常使用 PAX Wrap Url。

这对于 1 个 jar 依赖项是可以的,但是当有多个依赖项时呢?我可以使用 features.xml 文件来收集这些罐子,但为什么呢?我已经在我的 pom.xml 中指定了它们。

似乎应该有一种方法让 OSGi / Karaf 读取 pom.xml 依赖项,并在需要时使用 PAX Wrap url 将它们导入容器中。

我错过了什么吗?

【问题讨论】:

  • 您将如何处理仅构建时的依赖关系?
  • 使用提供的范围。
  • 另一种情况是当您有一个依赖于其他 3rd 方 jar 的 3rd 方 jar 时。在这种情况下,您必须自己遍历所有 3rd 方 jar 依赖项并创建功能文件或手动安装它们。

标签: java maven osgi apache-karaf


【解决方案1】:

抱歉,您的期望与现实不符。 首先,Maven 依赖项是构建时依赖项。这就是为什么你要声明你知道在运行时中可用的依赖项

<scope>provided</scope>

OSGi 和 Karaf 都不能对构建时间依赖项做任何事情。 但是 使用 OSGi,您可以确保您的构建依赖项在您的运行时也可用,并且不会干扰其他可能可用的库。

这就是为什么您需要申报进口和出口等。

Karaf 确实可以帮助您解决一些依赖关系,例如功能文件。 如果你有一个特性定义 maven 项目,你所有的 compile 范围依赖都可以包含在一个特性文件中。

但是,OSGi 解析器只查看当前可用的捆绑包,仅此而已,如果您想要某种 automagic,与 maven 没有任何连接解决您需要确保拥有的外部依赖项
a) 启用了 OBR 解析器(这取决于您使用的 karaf 版本,已经包含 4.x)和
b)手头的 OBR 存储库,Karaf Cave 将是在这种情况下要寻找的项目,因为它可以像代理一样驻留在 maven 存储库之上。

【讨论】:

    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 2017-07-28
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2011-11-02
    • 1970-01-01
    相关资源
    最近更新 更多