7

这是我的配置:

我们正在开发一个 OSGi 应用程序并希望包含日志记录。我决定使用 slf4j + logback。

我们使用 Eclipse 作为 IDE 和 Tycho 以从 Eclipse IDE(如 Manifest Editor 等)中受益。

所以我尝试了以下方法:

使用以下 Manifest.mf 创建了一个新插件:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Createcommand
Bundle-SymbolicName: de.hswt.oms.ws.wsr.createcommand
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: de.hswt.oms.ws.command.wsr,
 de.hswt.oms.ws.ds.core.data.impl,
org.slf4j
Service-Component: OSGI-INF/component.xml

现在,当我转到运行 -> 运行配置 -> OSGi 框架并选择我的 Bundle 并单击“添加必需的插件”时,将选择 100 多个 Bundle,我会收到很多错误和异常。

所以我从现有的罐子里想出了一个新的插件,其中包括以下三个罐子:

  • logback-classic-1.0.7
  • logback-core-1.0.7
  • com.springsource.slf4j.api-1.6.1(我不相信这是个好主意,但是嘿......)

如果我手动创建一个新的运行配置(不单击“添加所需的捆绑包”,它会按预期工作,但只要我点击“添加所需的捆绑包”,我就会回到 100 多个带有很多错误的捆绑包(一些 Jetty 的东西例子...)

所以我的问题是:如何在我的 OSGi 应用程序中启用 logback 和 slf4j 并在 eclipse 中使用它并正确配置它?

如果您需要更多信息,请随时询问。

4

4 回答 4

9

AFAIK 当前官方 Logback/SLF4J jar 中的捆绑清单标头中存在一些问题。但是,您只需要以下三个 jars/bundles。基本功能不需要其他任何东西。

  • SLF4J API
  • Logback 核心
  • Logback 经典

在 Eclipse 中,我们将包放在 Orbit 中,以便跨项目重复使用。我们对清单标头应用了一些我们认为有益的修改。例如,我们将实际的 SLF4J 绑定作为片段交付,以避免原始 SLF4J API jar 的循环依赖。

以下是捆绑包的下载链接:

您可能还想要:

请注意,“添加必需的插件”不够聪明。它可能选择了太多或太少的插件。有时服务 API 在一个包中提供,但实际的服务实现在第二个包中提供。它可能不会选择该捆绑包。

于 2012-11-28T07:09:02.433 回答
2

有一个复选框,上面写着“解决可选导入”之类的内容。默认情况下它处于打开状态,但这几乎总是会导致您描述的行为,即它想要添加所有内容。

关闭它应该会有所帮助。此外,PDE 往往会添加很多不需要的片段。

总而言之,我很少相信 Eclipse 会为运行时添加“正确”的包。我只是使用“验证”并手动添加所需的内容,然后再次检查。这可能需要几分钟,但是当你把它留给 PDE 时找出问题所在可能需要几个小时。

于 2012-11-28T06:44:02.970 回答
0

不确定 logback,但您可能还想尝试pax logging。只需安装 pax logging api 和 pax logging 服务,它应该可以工作。还有一个文档如何在 eclipse 中设置它

于 2012-11-28T06:40:25.823 回答
-1

如果您希望它与 Eclipse Equinox 一起使用,您可以尝试 Eclipse-BuddyPolicy。这使一个插件能够从另一个插件加载所有类,而无需显式导入它。这可能会解决您的问题。

从带有罐子的捆绑包中添加到您的清单中:

Eclipse-BuddyPolicy:依赖

并使用日志记录到捆绑包

Eclipse-RegisterBuddy:com.other.plugin

http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Fbundle_manifest.html

于 2012-11-27T21:41:21.253 回答