Я пытаюсь обновить Hibernate 3.2 до 3.4, который, очевидно, использует slf4j. Наш проект в настоящее время использует log4j. Поэтому я предполагаю, что я должен использовать завернутую реализацию slf4j-log4j12.
Зависимость Maven slf4j:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.6</version>
</dependency>
Хотя зависимость log4j равна:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>
И slf4j-log4j12, и log4j ссылаются на последнюю версию (которую я смог найти в репозитории Maven). Когда я запускаю свое приложение, Hibernate не в своей регистрации:
java.lang.NoSuchFieldError: name
at org.slf4j.impl.Log4jLoggerAdapter.<init>(Log4jLoggerAdapter.java:75)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:75)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103)
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:163)
...
Чего мне не хватает?
Редактировать 1: Если я удаляю зависимость log4j из моего pom.xml, я получаю ошибку:
java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory
at org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:60)
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:163)
...
Изменить 2: В этом блоге утверждается, что проблема вызвана отправкой аннотаций в спящем режиме с неверной версией slf4j-api.jar.