在使用Tycho Surefire的测试中使用Eclipse Orbit中的slf4j

时间:2014-02-25 14:30:09

标签: eclipse slf4j tycho surefire tycho-surefire-plugin

我目前正在尝试使用SLF4J作为Eclipse Orbit项目中的捆绑包,在基于Eclipse的产品中设置日志记录工具。

我详细使用:

org.slf4j.api
ch.qos.logback.classic
ch.qos.logback.core
ch.qos.logback.slf4j

当我尝试使用SLF4J log api运行测试用例时,在Tycho构建中我收到错误消息

19:05:50 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
19:05:50 SLF4J: Defaulting to no-operation (NOP) logger implementation
19:05:50 SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Surefire仅使用Eclipse产品的目标平台和插件Manifest.MF文件来检测依赖项。由于ch.qos.logback.slf4j是一个片段,因此不可能在Manifest中直接依赖。

我的假设是在测试执行期间片段不是运行时配置的一部分。

我希望我的问题不是太愚蠢,但是如何配置环境以便将片段添加到运行时配置中并且SLF4J可以解决对StaticLoggerBinder的请求?

2 个答案:

答案 0 :(得分:0)

  

我的假设是在测试执行期间片段不是运行时配置的一部分。

我不是slf4j专家,但它听起来是问题的根源。你需要以某种方式指定你想要的slf4j背后的实现。

顺便说一下,你的产品会遇到同样的问题。你如何解决那里的问题?


对这两个问题的建议是创建(或重复使用)引用您想要的片段的功能。一旦你有这样的功能,你可以

  1. 将其包含在您的产品中,以确保日志安装中的日志记录工作正常,

  2. 将它包含在您的测试运行时中,以使日志记录在那里工作。您可以使用以下配置执行此操作:

    <plugin>
      <groupId>org.eclipse.tycho</groupId>
      <artifactId>target-platform-configuration</artifactId>
      <version>${tycho-version}</version>
      <configuration>
        <dependency-resolution>
          <extraRequirements>
            <requirement>
              <type>eclipse-feature</type>
              <id>feature-referencing-the-logging-implementation-fragment</id>
              <versionRange>0.0.0</versionRange>
            </requirement>
          </extraRequirements>
        </dependency-resolution>
      </configuration>
    </plugin>
    

答案 1 :(得分:0)

虽然他是一个老帖子,我最近遇到了同样的问题,并希望我的回答会有所帮助。解决方案是将ch.qos.logback.slf4j片段的jar添加到JUnit测试类路径中。您可能希望添加驻留在eclipse / plugins文件夹中的jar,以确保该版本与eclipse安装中的插件匹配。