Maven исключает/удаляет тестовую зависимость, определенную в родительском POMJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Maven исключает/удаляет тестовую зависимость, определенную в родительском POM

Сообщение Anonymous »

Это похоже на исключение зависимости в дочернем pom, унаследованном от родительского pom, за исключением того, что оно связано с областями тестирования и компиляции.
У меня есть родительский POM, который включает зависимость org.slf4j:slf4j-api, так что все дочерние проекты будут использовать SLF4J для API ведения журнала. Затем, чтобы во всех проектах можно было вести журналирование модульных тестов (независимо от того, какую реализацию SLF4J они используют в основной, то есть нетестовой, части проекта), я включаю SLF4J Simple, но только в область тестирования:

Код: Выделить всё

org.slf4j
slf4j-simple
test

(Я понимаю точку зрения, что родительские POM не должны объявлять зависимости, а должны использовать только управление зависимостями. Хотя в целом я не согласен с этим, настройка тестов — это совсем другая история. Я не хочу, чтобы каждый отдельный подпроект должен был объявлять JUnit, Hamcrest, Hamcrest Extra, Mockito, Simple Logging и т. д. Платформа тестирования должна быть единой для всех наших проектов без особых церемоний, просто чтобы настроить project.)
Это работает нормально, пока один проект Foo не захочет использовать Logback в качестве реализации SLF4J.

Код: Выделить всё

ch.qos.logback
logback-classic
1.4.1

Это прекрасно работает для самого приложения Foo, но теперь для тестов Foo внезапно появились две конкурирующие реализации SLF4J: Logback и SLF4J simple. Это представляет собой конфликт привязок:

Код: Выделить всё

SLF4J: Class path contains multiple SLF4J providers.
SLF4J: Found provider [ch.qos.logback.classic.spi.LogbackServiceProvider@363ee3a2]
SLF4J: Found provider [org.slf4j.simple.SimpleServiceProvider@4690b489]
SLF4J: See https://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual provider is of type [ch.qos.logback.classic.spi.LogbackServiceProvider@363ee3a2]
Мне нужно выполнить одно из следующих действий:
  • В POM, куда я добавляю зависимость ch.qos.logback:logback-classic, мне нужно исключить org.slf4j:slf4j-simple из родительского POM. (Это предпочтительное решение.)
  • В POM, где я добавляю зависимость ch.qos.logback:logback-classic, мне нужно указать, что ch.qos.logback:logback-classic предназначен для всех областей кроме области test (чтобы не конфликтовать с org.slf4j:slf4j-simple).
Я не совсем понимаю, как это сделать. Есть идеи?
Одно из предложений заключалось в том, чтобы переопределить org.slf4j:slf4j-simple с предоставленным. Таким образом, pom.xml для проекта Foo будет выглядеть так:

Код: Выделить всё

…

ch.qos.logback
logback-classic



org.slf4j
slf4j-simple
provided

…
К сожалению, это не работает. SLF4J по-прежнему видит двух поставщиков SLF4J в пути к классам и показывает сообщение, показанное выше. Область действия просто предотвращает транзитивное включение зависимости в другие проекты; похоже, он не удаляет его из пути к классам текущего проекта.


Подробнее здесь: https://stackoverflow.com/questions/737 ... parent-pom
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»