【问题标题】:OSGI and maven dependencies among bundles and jars包和 jar 之间的 OSGI 和 maven 依赖关系
【发布时间】:2013-09-18 00:55:20
【问题描述】:

我有一个关于 OSGI Bundles 和“正常”maven jar 依赖项的问题。

以下场景:

一个多模块的maven项目:一个

使用 A.X、A.M 模块:

A.X 是一个 OSGI 包

A.M 是启动 OSGI 框架并加载包 A.X 的普通 java 应用程序

在项目顶级 pom (A.pom) 中,我定义了对 commons-logging-1.1.1 的依赖项 然后我在我的 OSGI Bundle A.X 中使用 commons-logging。 maven-bundle-plugin 为 A.X 生成清单,其中包含出现“commons-logging”的导入条目。

当我启动 A.M 并在控制台上打印出所有已加载的 jar(使用 getSystemClassLoader...)时,会列出 ../../../commons-logging-1.1.1.jar。 因为来自顶级 pom 的 maven 依赖。

现在我尝试安装我的 OSGI 捆绑包 A.X 并获得“捆绑包中未解决的约束.....commons-logging”异常。

为什么在安装捆绑包时不能使用内存中(A.M)中的 commons-logging lib 解决 commons-logging 依赖项(来自 A.X)?

感谢您的帮助!!!!

【问题讨论】:

  • 它是嵌入式 OSGi 环境吗?我猜 commons-logging 包不在 OSGi 容器的引导类路径上。或者,如果是,他们将获得 0.0.0 版本,并将您的捆绑线连接到更高版本。尝试将这些包添加到具有正确版本的引导类路径中。
  • 感谢您的回答!!我会试试的!

标签: java maven dependencies osgi osgi-bundle


【解决方案1】:

使用 getSystemClassLoader 打印出加载的 jar 并不一定能告诉您通过 OSGi 可以使用什么 - 请记住,OSGi 有它自己的类加载机制。

据我了解,commons-logging 必须是来自其他捆绑包的exported,以便 OSGi 可以将其连接到您的 AX 组件 - 可能有用于 commons-logging 的捆绑包或功能,您可以轻松地将其添加为依赖项.

我不确定您使用的是哪个 OSGi 容器(我使用 Fuse),但应该有一些方法可以查看您正在使用的包的导入和导出。由于 A.X 导入 commons-logging,因此需要另一个包导出它(使用适当的版本)。

在 fuse 世界中,将依赖项添加到系统包就像将其添加到 features.xml 文件一样简单。但由于我不知道您使用的是哪个容器,所以我不确定您如何做到这一点。

这有帮助吗?

【讨论】:

  • 感谢您的快速响应!!我正在使用 Apache Felix,但我想使用符合标准的机制。
  • 好的,太好了,你能看到任何可用的 Apache Felix 发布的公共日志包吗?他们是否推荐一种方法 re:logging 框架?
  • 有一个 felix 日志包可用...谢谢:)...我认为 OSGI 通常支持一种机制,可以使用具有经典 jar 依赖项的包,而无需将它们全部重新打包到一个包中...我'我是 OSGI 的新手,我认为我仍然存在概念上的差距。
  • @Tobi 我认为您的概念差距是认为“类路径”在 OSGi 中仍然相关。它不是......本质上,没有类路径之类的东西。我们在框架中安装了 bundles(模块)。您应该为此阅读基本的 OSGi 介绍或教程。
【解决方案2】:

那是因为您的 OSGI 捆绑包之一使用了公共日志记录中的某些内容,这不是 osgi 中的导出包。因此,您要么找到一个捆绑的 commons-logging 版本并导出您尝试使用的包,要么将 jar 添加到用户包的bundle-classpath(还有其他更脏的选项)。第一个选项比第二个选项好得多,因为它是模块化的;即,您可以在不更改任何其他捆绑包的情况下更新 commons-logging。

就像已经提到的,它在应用程序类路径中的事实是无关紧要的

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2017-09-25
    • 2015-12-13
    相关资源
    最近更新 更多