Hibernate 5 java.lang.NoSuchMethodError org.jboss.logging.Logger.debugf
У меня проблема при развертывании webapp с hibernate 5
Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:149) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:759) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:490) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633) [spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570) [spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
... 23 more
С Hibernate 4 все в порядке.
Я просмотрел класс NamedQueryRepository
в строке 149. Этот класс вызывает метод debugf таким образом
log.debugf( "Checking %s named HQL queries", namedQueryDefinitionMap.size() );
Я не вижу проблемы
Вот мое дерево зависимостей
[INFO] ------------------------------------------------------------------------
[INFO] Building app Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ app---
[INFO] +- org.springframework:spring-aspects:jar:4.1.7.RELEASE:compile
[INFO] | \- org.aspectj:aspectjweaver:jar:1.8.6:compile
[INFO] +- org.springframework:spring-tx:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-beans:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-context-support:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-context:jar:4.1.7.RELEASE:compile
[INFO] | \- org.springframework:spring-expression:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-core:jar:4.1.7.RELEASE:compile
[INFO] | \- commons-logging:commons-logging:jar:1.2:compile
[INFO] +- org.springframework:spring-orm:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-web:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:4.1.7.RELEASE:compile
[INFO] | \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- org.springframework:spring-jdbc:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-test:jar:4.1.7.RELEASE:test
[INFO] +- junit:junit:jar:4.12:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.hibernate:hibernate-entitymanager:jar:5.0.0.CR2:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile
[INFO] | +- org.hibernate:hibernate-core:jar:5.0.0.CR2:compile
[INFO] | | +- antlr:antlr:jar:2.7.7:compile
[INFO] | | \- org.jboss:jandex:jar:1.2.2.Final:compile
[INFO] | +- dom4j:dom4j:jar:1.6.1:compile
[INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] | +- org.hibernate.common:hibernate-commons-annotations:jar:5.0.0.Final:compile
[INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] | +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile
[INFO] | \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO] +- org.hibernate:hibernate-c3p0:jar:5.0.0.CR2:compile
[INFO] | \- com.mchange:c3p0:jar:0.9.2.1:compile
[INFO] | \- com.mchange:mchange-commons-java:jar:0.2.3.4:compile
[INFO] +- org.primefaces:primefaces:jar:5.2.RC3:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.2:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.2:compile
[INFO] \- net.sourceforge.jtds:jtds:jar:1.2.8:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Ответы
Ответ 1
В стеклянной рыбе Эта проблема вызвана столкновением с зависимостями модулей стеклянной рыбы. Если вы проверите список lib в glassfishdir/modules, вы увидите boss-logging.jar. Вы можете удалить его и заменить последним, например org.jboss.logging: jboss-logging: jar: 3.3.0.Final. Это сработало для меня.
Ответ 2
В моем случае виновником стал артефакт валидатора Джерси bean.
Одна из его зависимостей bean -validation-2.4.0-b06.jar по какой-то причине содержит классы ведения журнала Jboss.
Я должен был исключить артефакты jersey- bean -validation и bean -validator из зависимости spring -boot-starter-jersey:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
<exclusions>
<exclusion>
<artifactId>jersey-bean-validation</artifactId>
<groupId>org.glassfish.jersey.ext</groupId>
</exclusion>
<exclusion>
<artifactId>bean-validator</artifactId>
<groupId>org.glassfish.hk2.external</groupId>
</exclusion>
</exclusions>
</dependency>
EDIT: Начиная с spring -boot 1.3.0, это фиксировано, и вышеперечисленные исключения больше не нужны.
Ответ 3
Попробуйте обновить jboss-logging.jar
до более новой версии. Тот, который вы используете, кажется, не совместим с Hibernate 5.
Ответ 4
Я получал ту же ошибку, используя jersey- spring -3 и hibernate 5.0.1.Final.Excluding org.glassfish.hk2.external: bean -validator от jersy- spring -3 и добавление org.glassfish.jersey.ext: jersey- bean -валификация работала для меня. Вот моя последняя зависимость.
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.22.2</version>
<exclusions>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>bean-validator</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-bean-validation</artifactId>
<version>2.22.2</version>
</dependency>
from:
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.22.2</version>
</dependency>
Ответ 5
Я также столкнулся с такой проблемой при развертывании уха на сервере weblogic.
По-видимому, weblogic также использует систему ведения журналов jboss и использует старую версию.
Мое исправление:
Добавьте "weblogic-application.xml" в папку META-INF с этим контентом:
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application>
<prefer-application-packages>
<package-name>org.jboss.logging.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
<resource-name>org/jboss/logging/Logger.class</resource-name>
</prefer-application-resources>
</weblogic-application>
Ответ 6
По всей вероятности, у вас есть устаревшая JARB Logging JAR на пути к классу приложений. Методы ...f
являются относительно новым дополнением к API Logger. Hibernate 5 напрямую зависит от версии ведения журнала 3.3.0, но возможно, что некоторые из ваших pom.xml
у вас есть переопределяющая зависимость от более ранней версии. Другая возможность заключается в том, что вы развертываете контейнер JBoss, где API протоколирования предоставляется контейнером. Затем вам может потребоваться обновить сервер JBoss или ввести обходной путь, чтобы предпочесть классы, предоставленные вашим приложением.
Ответ 7
Проверьте мой ответ на NoSuchMethodError: org.jboss.logging.Logger.debugf
Даже после проблем с обновлением до Hibernate 5.2 у меня возникли проблемы, и виновником был "jboss-logging 3.3.0.Final", который я вижу и в ваших зависимостях.
Следуя шагам по общей ссылке в ответе, вы можете уменьшить зависимость jboss-logging до уровня 3.2, который имеет требуемую функцию.
Ответ 8
У меня была такая же ошибка, она сначала решается добавить зависимость jboss logging jar следующим образом
<!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging -->
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.0.Final</version>
</dependency>
И если ошибка все еще существует, добавьте следующее исключение к зависимости maven.
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.12</version>
<exclusions>
<exclusion>
<groupId>org.glassfish.hk2</groupId>
<artifactId>hk2</artifactId>
</exclusion>
</exclusions>
</dependency>
После выполнения этих двух вещей, это работает хорошо для меня. Я надеюсь, что это будет работать и для вас.
Ответ 9
Я тоже столкнулся с этой проблемой. Это то, что зафиксировало это для меня
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Ответ 10
У меня такая же проблема с spring4.2.1 + hibernate5.0.2 + jersey2.23.1.
Мое решение такое же: исключая org.glassfish.hk2.external:bean-validator
из jersy-spring-3
и добавляя org.glassfish.jersey.ext:jersey-bean-validation
.
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.23.1</version>
<exclusions>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>bean-validator</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-bean-validation</artifactId>
<version>2.23.1</version>
</dependency>
В моей рабочей среде просто удалите bean-validator-2.4.0-b34.jar
и добавьте jersey-bean-validation-2.23.1.jar
Ответ 11
Это может быть вызвано, если зависимость включает
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.2</version>
</dependency>
Исключить его с помощью элемента exclusions
в dependency
.
Ответ 12
В моем случае проблема была вызвана тем, что более ранняя версия jboss-logging стала транзитивной зависимостью от hibernate-ehcache, которую я нашел, посмотрев в дерево зависимостей maven. Я решил это, добавив исключение:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${hibernate.version}</version>
<exclusions>
<exclusion>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Ответ 13
JBoss 6.1 +??
Я установил org.jboss.logging для jboss-logging-3.3.0.Final-redhat-1.jar в модулях jboss.
Его работы для меня.
Att.,
Ответ 14
Ошибка, которую я получил, была
Application run failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
:::
:::
Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V"
я удалил папку jboss-logging < .m2\repository\org\jboss\logging\jboss-logging
> и перезапустил сервер jboss.
Банки были добавлены обратно, и ошибка исчезла. (после этого я получил другую ошибку, но, по крайней мере, эта ошибка исчезла)
Ответ 15
Вы можете использовать Eclipse, чтобы узнать, какой jar вызывает проблему:
- Настройте проект со всеми вашими банками на пути к классам
- Навигация → Открыть тип...
- Введите
org.jboss.logging.Logger
Это даст вам список банок, которые включают в себя класс. Один из них устарел и должен быть исключен (см. Другие ответы на этот вопрос).