Использование slf4j с Eclipse Orbit в тестах с Tycho Surefire

В настоящее время я пытаюсь настроить средство ведения журнала в нашем продукте на основе Eclipse, используя SLF4J в качестве комплекта из проекта Eclipse Orbit.

Я использую подробно:

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

Когда я пытаюсь запустить тестовые случаи, используя API-интерфейс журнала SLF4J, в сборке 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 является фрагментом, прямая зависимость в манифесте невозможна.

Я предполагаю, что этот фрагмент не является частью конфигурации времени выполнения во время выполнения теста.

Я надеюсь, что мой вопрос не слишком глуп, но как я могу настроить среду так, чтобы фрагмент был добавлен в конфигурацию времени выполнения, и SLF4J мог решить запрос на StaticLoggerBinder?

2 ответа

Несмотря на то, что это старый пост, я недавно столкнулся с той же проблемой и надеюсь, что мой ответ поможет. Решение состоит в том, чтобы добавить jar фрагмента ch.qos.logback.slf4j в путь к классам тестов JUnit. Возможно, вы захотите добавить jar, который находится в вашей папке eclipse/plugins, чтобы убедиться, что версия соответствует плагинам в вашей установке eclipse.

Я предполагаю, что этот фрагмент не является частью конфигурации времени выполнения во время выполнения теста.

Я не эксперт по slf4j, но, похоже, это корень проблемы. Вам нужно как-то указать с реализацией за slf4j вы хотите.

Кстати, у вас будет такая же проблема в вашем продукте. Как вы решаете проблему там?


Для решения обеих проблем рекомендуется создать (или повторно использовать) функцию, которая ссылается на фрагменты, которые вы хотите иметь. Если у вас есть такая функция, вы можете

  1. включите его в свой продукт, чтобы убедиться, что регистрация работает в установке prduct, и

  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>
    
Другие вопросы по тегам