Ich habe ein Problem, wenn ich eine Webapp mit Hibernate 5 bereitstelle
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
Mit Hibernate 4 ist alles in Ordnung.
Ich habe mir die Klasse NamedQueryRepository
in Zeile 149 angesehen. Diese Klasse ruft die Methode debugf auf diese Weise auf
log.debugf( "Checking %s named HQL queries", namedQueryDefinitionMap.size() );
Ich kann das Problem nicht sehen
Hier ist mein Abhängigkeitsbaum
[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] ------------------------------------------------------------------------
Bei Glasfischen Dieses Problem wird durch Kollisionen mit Abhängigkeiten von Glassfish-Modulen verursacht. Wenn Sie die lib-Liste in glassfishdir/modules überprüfen, wird boss-logging.jar angezeigt. Sie können es löschen und durch aktuelle wie org.jboss.logging ersetzen: jboss-logging: jar: 3.3.0.Final. Es hat für mich funktioniert.
In meinem Fall war der Täter das Jersey-Bean-Validator-Artefakt . Eine seiner Abhängigkeiten, Bean-Validation-2.4.0-b06.jar, enthält aus irgendeinem Grund Jboss-Protokollierungsklassen. Ich musste die Trikot-Bean-Validierung und die Bean-Validator-Artefakte aus der Spring-Boot-Starter-Jersey-Abhängigkeit ausschließen:
<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>
BEARBEITEN: Ab Spring-Boot 1.3.0 ist dieses Problem behoben und die obigen Ausschlüsse sind nicht mehr erforderlich.
Aktualisieren Sie jboss-logging.jar
auf eine neuere Version. Die von Ihnen verwendete scheint mit Hibernate 5 nicht kompatibel zu sein.
Ich war auch mit solchen Problemen konfrontiert, als ich das Ohr auf einem Weblogic-Server installierte . Anscheinend verwendet Weblogic auch das Jboss-Protokollierungssystem und verwendet eine alte Version davon.
Mein Fix:
Füge "weblogic-application.xml" zum META-INF-Ordner mit diesem Inhalt hinzu:
<?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>
Ich habe den gleichen Fehler mit jersey-spring-3 und hibernate 5.0.1.Final.Exkludiert. Bean-Validierung hat für mich funktioniert. Hier ist meine endgültige Abhängigkeit.
<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>
von :
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.22.2</version>
</dependency>
Überprüfen Sie meine Antwort unter NoSuchMethodError: org.jboss.logging.Logger.debugf
Selbst nach dem Upgrade auf Hibernate 5.2 hatte ich Probleme, und der Täter war "jboss-logging 3.3.0.Final", was ich auch in Ihren Abhängigkeiten als vorhanden sehe . Wenn Sie die Schritte auf dem in der Antwort angegebenen Link ausführen, können Sie dies tun Reduzieren Sie die Abhängigkeits-JBoss-Protokollierung auf die Stufe 3.2, die die erforderliche Funktion hat.
Wahrscheinlich befindet sich im Klassenpfad der Anwendung eine veraltete JBoss-Protokollierungs-JAR. Die ...f
-Methoden sind eine relativ neue Ergänzung der Logger-API. Der Ruhezustand 5 hängt direkt von der Logging-Version 3.3.0 ab. Möglicherweise haben Sie jedoch in Ihrem pom.xml
eine übergeordnete Abhängigkeit von einer früheren Version. Eine andere Möglichkeit besteht darin, dass Sie die Bereitstellung in einem JBoss-Container vornehmen, in dem die Protokollierungs-API vom Container bereitgestellt wird. Dann müssen Sie möglicherweise den JBoss-Server aktualisieren oder eine Problemumgehung einführen, um Klassen zu bevorzugen, die von Ihrer Anwendung beigesteuert werden.
Auch ich habe mich diesem Problem gestellt. Das hat es für mich behoben
<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>
JBoss 6.1+?
Ich setze org.jboss.logging für jboss-logging-3.3.0.Final-redhat-1.jar in Modulen von jboss.
Es funktioniert für mich.
Att.,
Dies kann verursacht werden, wenn eine Abhängigkeit beinhaltet
<dependency>
<groupId>org.Eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.2</version>
</dependency>
Schließen Sie es mit einem exclusions
-Element in dependency
aus.
Mit Eclipse können Sie herausfinden, welches Glas das Problem verursacht:
org.jboss.logging.Logger
Dies gibt Ihnen eine Liste von Gläsern, die die Klasse enthalten. Eine davon ist veraltet und muss ausgeschlossen werden (Variationen hierzu finden Sie in den anderen Antworten).
Ich habe das gleiche Problem mit spring4.2.1 + hibernate5.0.2 + jersey2.23.1 . Meine Lösung ist die gleiche: Ohne org.glassfish.hk2.external:bean-validator
von jersy-spring-3
und Hinzufügen von 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>
Löschen Sie in meiner Produktumgebung einfach bean-validator-2.4.0-b34.jar
und fügen Sie jersey-bean-validation-2.23.1.jar
hinzu.
Ich hatte den gleichen Fehler, es wird von .__ gelöst. Fügen Sie zunächst die Abhängigkeit des jboss-Protokollierungsglases wie folgt hinzu
<!-- 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>
Wenn der Fehler weiterhin besteht, fügen Sie der Maven-Abhängigkeit folgende Exklusion hinzu.
<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>
Nachdem ich diese beiden Dinge getan habe, funktioniert es gut für mich. Ich hoffe, dass es auch für Sie funktioniert.
In meinem Fall wurde das Problem durch eine ältere Version von jboss-logging verursacht, die als transitive Abhängigkeit von hibernate-ehcache auftrat. Ich habe es gelöst, indem ich den Ausschluss hinzugefügt habe:
<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>
Fehler, den ich bekam war "
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"
ich habe den JBoss-Logging-Ordner <.m2\repository\org\jboss\logging\jboss-logging
> gelöscht und den JBoss-Server neu gestartet.
Die Gläser wurden addiert und der Fehler war verschwunden. (Ich habe danach einen anderen Fehler bekommen, aber zumindest war dieser Fehler weg)