OSGi + Logback + slf4j - Eclipse 运行配置

7

以下是我的配置:

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

我们使用Eclipse作为IDE,Tycho来获得类似Manifest Editor等Eclipse IDE的优势。

因此,我尝试了以下操作:

创建了一个新插件,其中包括以下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多个Bundles,我会遇到很多错误和异常。
因此,我从现有的Jars中开发了一个新的插件,其中包括以下三个Jars: logback-classic-1.0.7 logback-core-1.0.7 com.springsource.slf4j.api-1.6.1 (我不认为这是一个好主意,但是......)
如果我手动创建一个新的运行配置(不使用"添加所需bundles"),它可以按预期工作。但是,只要我点击"添加所需bundles",我就会回到100多个bundles并出现大量错误(例如一些Jetty东西...)。
因此,我的问题是:我如何在我的OSGi应用程序中启用logback和slf4j,在eclipse中使用它并正确配置它?
如果您需要更多信息,请随时问问。
4个回答

9
据我所知,当前官方的Logback/SLF4J jars中的捆绑清单头存在一些问题。然而,您只需要以下三个jar/bundle即可,不需要其他内容来实现基本功能。
- SLF4J API - Logback Core - Logback Classic
在Eclipse中,我们将bundle放入Orbit以供项目重用。我们对清单头进行了一些修改,认为这些修改是有益的。例如,我们将实际的SLF4J绑定作为片段提供,以避免原始SLF4J API jar的循环依赖关系。
这里是bundle的下载链接:

您可能还需要:

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

2

有一个复选框,上面写着“解决可选导入项”。默认情况下它是开启的,但这基本上总是会导致你所描述的行为,即它想要添加所有东西。

关闭它应该会有所帮助。此外,PDE倾向于添加许多不必要的片段。

总的来说,我很少相信Eclipse会添加运行时所需的“正确”包。我只使用“验证”,然后手动添加所需内容,并再次检查。这可能需要几分钟,但如果让PDE自己处理,弄清楚出了什么问题可能需要几个小时。


0

-1

如果您想要在Eclipse Equinox中使用它,可以尝试使用Eclipse-BuddyPolicy。这使得一个插件可以加载另一个插件中的所有类,而不需要显式导入。

这可能会解决您的问题。

从具有jars的bundle中添加到您的清单:

Eclipse-BuddyPolicy:dependent

并向使用日志记录的bundle添加:

Eclipse-RegisterBuddy:com.other.plugin

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接