Каков наилучший способ объявить зависимость Maven как только используемую для пути класса тестирования (но не для тестовой компиляции)?
В частности, я хочу slf4j-api
(фаза ведения журнала) как типичную зависимость от компиляции, но я хочу, чтобы slf4j-simple
(реализация barebones, подходящая для модульных тестов), только на пути тестирования тестовой среды выполнения (она не нужна для компиляции теста). Я делал это:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
</dependency>
Однако недостатком этого является то, что dependency:analyze
сообщает slf4j-simple
как неиспользуемый, предположительно потому, что он не нужен для компиляции:
[WARNING] Unused declared dependencies found:
[WARNING] org.slf4j:slf4j-simple:jar:1.7.7:test
Я не могу использовать зависимость runtime
, потому что я не хочу, чтобы эта зависимость транзитивно унаследовалась (например, поэтому нисходящие зависимости могут использовать log4j и т.д.). Я пробовал runtime
с помощью optional=true
, но это приводит к тому же предупреждению.
(Заметьте, что я мог бы также установить ignoreNonCompile
для плагина зависимостей, но это похоже на очень тупой инструмент, который скроет другие потенциальные проблемы.)