Каков наилучший способ объявить зависимость 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
для подключаемого модуля зависимостей, но это кажется очень грубым инструментом, скрывающим другие потенциальные проблемы.)
runtime
? - person jmj   schedule 01.01.2015runtime
, поэтому кажется, что только область действия здесь не является ответом. Что мне действительно нужно, так это область, которая является пересечениемtest
иruntime
(насколько это касается пути к классу), и чтобы подключаемый модуль зависимостей вел себя менее глупо в отношении неиспользуемых зависимостейruntime
. - person Trevor Robinson   schedule 01.01.2015