[SPRING] NoSuchMethodError : org.jboss.logging.Logger.debugf
SPRINGNoSuchMethodError : org.jboss.logging.Logger.debugf
나는 봄 + 봄 데이터 + Log4J2 작업 스택을 만들려고 해요. 아쉽게도 My Glassfish 4.1 Server에 인공물을 배포하면 다음 오류가 발생합니다.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class com.canal.config.spring.ContextConfig: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.persistence.EntityManagerFactory com.canal.config.spring.ContextConfig.entityManagerFactory()] threw exception; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:601)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1113)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1008)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:505)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:725)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:535)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:244)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1583)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1382)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5704)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:5946)
at com.sun.enterprise.web.WebModule.start(WebModule.java:691)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1041)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:1024)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2286)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1932)
at com.sun.enterprise.web.WebApplication.start(WebApplication.java:139)
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.persistence.EntityManagerFactory com.canal.config.spring.ContextConfig.entityManagerFactory()] threw exception; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:188)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:590)
... 69 more
Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:149)
at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:764)
at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:495)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at com.canal.config.spring.ContextConfig.entityManagerFactory(ContextConfig.java:52)
at com.canal.config.spring.ContextConfig$$EnhancerBySpringCGLIB$$db0b8696.CGLIB$entityManagerFactory$0()
at com.canal.config.spring.ContextConfig$$EnhancerBySpringCGLIB$$db0b8696$$FastClassBySpringCGLIB$$bca83b68.invoke()
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:312)
at com.canal.config.spring.ContextConfig$$EnhancerBySpringCGLIB$$db0b8696.entityManagerFactory()
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
... 70 more
내 pom.xml 위치 :
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springapp</groupId>
<artifactId>advance</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>advance</name>
<properties>
<java.version>1.8</java.version>
<springframework.version>4.2.1.RELEASE</springframework.version>
<log4j.version>2.4</log4j.version>
<javaee.version>7.0</javaee.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
<exclusions>
<!-- Utilise Log4J à la place du logger par défaut -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springframework.version}</version>
<exclusions>
<!-- Utilise Log4J à la place du logger par défaut -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springframework.version}</version>
<exclusions>
<!-- Utilise Log4J à la place du logger par défaut -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Log4J2 Dependance -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.4</version>
</dependency>
<!-- Bridge Log Spring vers Log4J -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.9.0.RELEASE</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.1.Final</version>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
누구는 단서가 있습니까?
해결법
-
==============================
1.hibernate-entitymanager는 jboss-logging을 의존성으로 가져 왔지만 가장 최신 버전은 아니며 구현 된 메소드가 없습니다. jboss 로깅이 필요하지 않으므로 제외하십시오.
hibernate-entitymanager는 jboss-logging을 의존성으로 가져 왔지만 가장 최신 버전은 아니며 구현 된 메소드가 없습니다. jboss 로깅이 필요하지 않으므로 제외하십시오.
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.0.1.Final</version> <exclusions> <exclusion> <groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> </exclusion> </exclusions> </dependency>
또는 hibernate에 jboss-logging이 필요하다고 판명되면 jboss-logging의 최신 버전을 추가 종속성으로 추가하십시오.
<dependency> <groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> <version>3.3.0.Final</version> </dependency>
-
==============================
2.비슷한 문제가 있었는데 WEB-INF 디렉토리에 glassfish-web.xml 파일을 만들어서 고칠 수있었습니다. 파일의 내용은 다음과 같습니다.
비슷한 문제가 있었는데 WEB-INF 디렉토리에 glassfish-web.xml 파일을 만들어서 고칠 수있었습니다. 파일의 내용은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> <glassfish-web-app> <class-loader delegate="false"/> </glassfish-web-app>
이렇게하면 glassfish가 내부 라이브러리를로드하지 않고 프로젝트의 라이브러리를로드 할 수 있습니다.
-
==============================
3.org.jboss.logging.Logger.debugf 메소드는 jboss-logging 버전 3.3.0에서만 사용할 수 있습니다. 프로젝트에이 종속성이있는 경우 GlassFish 서버에도 동일한 버전이 있는지 확인해야합니다. 이 오류 메시지는 이전 버전이므로 필요한 방법이 없기 때문에 동일한 오류 메시지가 표시되어 glassfish 설치 폴더에서 jboss-logging.jar을 대체하여 해결했습니다. 예를 들어 다음 경로에 항아리가 있습니다.
org.jboss.logging.Logger.debugf 메소드는 jboss-logging 버전 3.3.0에서만 사용할 수 있습니다. 프로젝트에이 종속성이있는 경우 GlassFish 서버에도 동일한 버전이 있는지 확인해야합니다. 이 오류 메시지는 이전 버전이므로 필요한 방법이 없기 때문에 동일한 오류 메시지가 표시되어 glassfish 설치 폴더에서 jboss-logging.jar을 대체하여 해결했습니다. 예를 들어 다음 경로에 항아리가 있습니다.
C:\Program Files\glassfish-4.1.1\glassfish\modules\jboss-logging.jar
이전 항아리를 지웠고 버전 3.3.0과 같은 이름으로 새로운 항아리를 넣었습니다. GlassFish 서버를 다시 시작하기 만하면 새로운 jar 버전이 적용됩니다.
-
==============================
4.이 문제는 JBoss 모듈 항아리의 충돌로 인해 발생했습니다. jboss-logging 파일을 최신 버전으로 바꾸면 문제가 해결되었습니다. 파일은 modules \ system \ layers \ base \ org \ jboss \ logging \ main 폴더에 있습니다.
이 문제는 JBoss 모듈 항아리의 충돌로 인해 발생했습니다. jboss-logging 파일을 최신 버전으로 바꾸면 문제가 해결되었습니다. 파일은 modules \ system \ layers \ base \ org \ jboss \ logging \ main 폴더에 있습니다.
또한 module.xml 파일의 jar 이름을 새 jar 이름으로 바꿔야합니다. 파일은 같은 폴더에 있습니다.
-
==============================
5.이 기사의 단계가 오류를 해결하는 데 유용하다는 것을 알았습니다. http://sanjayingole.blogspot.in/2015/10/caused-by-javalangnosuchmethoderror.html
이 기사의 단계가 오류를 해결하는 데 유용하다는 것을 알았습니다. http://sanjayingole.blogspot.in/2015/10/caused-by-javalangnosuchmethoderror.html
짧게 따라갈 단계 (Eclipse를 사용하는 경우) -
-
==============================
6.글래스 피시 저지를 사용하고 있다면 bean-validator가 의존성으로 나오고 tomcat은 확실히 거기에서 Logger 클래스를로드하려고 시도합니다.
글래스 피시 저지를 사용하고 있다면 bean-validator가 의존성으로 나오고 tomcat은 확실히 거기에서 Logger 클래스를로드하려고 시도합니다.
bean-validator clas는 또한 동일한 패키지에 Logger 클래스를 포함합니다.
병을 제외해야 문제가 해결됩니다.
<dependency> <groupId>org.glassfish.jersey.ext</groupId> <artifactId>jersey-spring3</artifactId> <version>2.24.1</version> <exclusions> <exclusion> <artifactId>spring-aop</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>bean-validator</artifactId> <groupId>org.glassfish.hk2.external</groupId> </exclusion> </exclusions> </dependency>
from https://stackoverflow.com/questions/32912773/nosuchmethoderror-org-jboss-logging-logger-debugf by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 동적으로 생성 된 필드 서버 측의 유효성 검사 방법 (0) | 2018.12.27 |
---|---|
[SPRING] @ 생성자 인자를 필요로하는 빈을 @Autowire하는 방법이 있습니까? (0) | 2018.12.27 |
[SPRING] Spring-Hibernate - 현재 스레드에 대한 세션이 없습니다. (0) | 2018.12.27 |
[SPRING] 두 개의 포트로 스프링 부트 설정하기 (0) | 2018.12.27 |
[SPRING] JavaConfig로 스프링 보안에서 ROLE_ 접두사를 어떻게 제거합니까? (0) | 2018.12.27 |