У меня есть проект Maven, который использует SLF4J. Чтобы запустить его из Eclipse, я хочу выводить журнал на консоль go, поэтому я настроил зависимости следующим образом:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
То есть я вытягиваю slf4j-simple
с test
scope.
Проект представляет собой библиотеку. В его папке test
есть класс с методом main
, который выполняет некоторые тесты и диагностирует функции c. Когда я запускаю его таким образом из Eclipse, SLF4J регистрируется в System.err
, как и ожидалось.
Когда я использую проект библиотеки в другом (основной класс которого находится в папке src
проекта), SLF4J жалуется на следующая ошибка:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Я пытался добавить те же зависимости в родительский проект, но безрезультатно. Однако, если я изменю область действия slf4j-simple
на compile
или runtime
в родительском проекте, ведение журнала будет работать, как и ожидалось.
Что здесь происходит? Имеет ли это поведение какое-то отношение к дереву исходного кода, в котором находится основной класс (test
подразумевает, что я тестирую, таким образом, выявляются зависимости в области тестирования, src
подразумевает обычную среду выполнения и зависимости в тестовой области недоступны) ? Если да, то как мне сказать моей цепочке инструментов, что я хочу slf4j-simple
при работе в Eclipse, но какой-нибудь другой бэкэнд при создании JAR для развертывания?