OSGi + Logback + slf4j - Eclipse运行配置

时间:2012-11-27 16:49:27

标签: eclipse osgi slf4j equinox tycho

这是我的配置:

我们正在开发一个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

现在,当我搬到Run - >运行配置 - > OSGi框架并选择我的Bundle并单击“Add Required plugins”将选择100多个Bundles,我会收到很多错误和异常。

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

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

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

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

如果您需要更多信息,请随时提出。

4 个答案:

答案 0 :(得分:8)

AFAIK当前官方Logback / SLF4J jar中的bundle清单头中存在一些问题。但是,您只需要以下三个罐子/捆绑包。基本功能不需要其他功能。

  • SLF4J API
  • Logback Core
  • Logback Classic

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

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

您可能还需要:

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

不确定回退,但您可能还想尝试pax logging。只需安装pax logging api和pax logging服务即可。还有documentation how to set it up in eclipse

答案 3 :(得分:-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