Использование 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 вы хотите.
Кстати, у вас будет такая же проблема в вашем продукте. Как вы решаете проблему там?
Для решения обеих проблем рекомендуется создать (или повторно использовать) функцию, которая ссылается на фрагменты, которые вы хотите иметь. Если у вас есть такая функция, вы можете
включите его в свой продукт, чтобы убедиться, что регистрация работает в установке prduct, и
включите его в тестовую среду выполнения, чтобы там работало ведение журнала. Вы можете сделать это с помощью следующей конфигурации:
<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>