BundleException: невозможно разрешить модуль, поскольку он экспортирует пакет 'org.slf4j.spi' и также доступен ему из com.springsource.slf4j.api

В каком случае может произойти следующая ошибка? Это происходит спорадически при запуске приложения с несколькими пакетами. Что бы исправить эту ошибку?

Caused by: org.osgi.framework.BundleException: Unable to resolve module com.springsource.slf4j.api [135.0] because it exports package 'org.slf4j.spi' and is also exposed to it from com.springsource.slf4j.api [135.0] via the following dependency chain:

  com.springsource.slf4j.api [135.0]
    import: (&(package=org.slf4j.impl)(version>=1.6.1)(!(version>=2.0.0)))
     |
    export: package=org.slf4j.impl; uses:=org.slf4j
  com.springsource.slf4j.api [135.0]
    import: (&(package=org.slf4j)(version>=1.6.1)(version<=1.6.1))
     |
    export: package=org.slf4j; uses:=org.slf4j.spi
  com.springsource.slf4j.api [135.0]
    import: (&(package=org.slf4j.spi)(version>=1.6.1)(version<=1.6.1))
     |
    export: package=org.slf4j.spi
  com.springsource.slf4j.api [135.0]
    at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3574)
    at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1619)

1 ответ

С тех пор SLF4J дружественен к OSGi, поэтому нет необходимости использовать jars-s на основе springsource.

Установите новейший jar slf4j-api с реализацией, которую вы хотели бы использовать!

Как это устроено:

slf4j-api использует классы, которых нет в jar, и они не импортируются. slf4j-xxximpl (как и slf4j-simple) - это наборы фрагментов, где хостом является slf4j-api, поэтому у них будет общий загрузчик классов.

Это означает, что вы должны установить slf4j-api и slf4j-xxx вместе (если вы устанавливаете его во время выполнения, при необходимости обновите контейнер, чтобы иметь хорошее соединение). Это также означает, что slf4j не может работать с большим количеством реализаций, и также не очень хорошая идея иметь несколько версий slf4j-api в одном контейнере.

Решение. Удалите jar-файл на основе springsource и установите в контейнер новейшие jar-файлы slf4j-api и impl, а после этого вызовите обновление при необходимости.

Другие вопросы по тегам