복붙노트

[SPRING] NoSuchMethodError : org.jboss.logging.Logger.debugf

SPRING

NoSuchMethodError : 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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.이 기사의 단계가 오류를 해결하는 데 유용하다는 것을 알았습니다. http://sanjayingole.blogspot.in/2015/10/caused-by-javalangnosuchmethoderror.html

    이 기사의 단계가 오류를 해결하는 데 유용하다는 것을 알았습니다. http://sanjayingole.blogspot.in/2015/10/caused-by-javalangnosuchmethoderror.html

    짧게 따라갈 단계 (Eclipse를 사용하는 경우) -

  6. ==============================

    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>
    
  7. from https://stackoverflow.com/questions/32912773/nosuchmethoderror-org-jboss-logging-logger-debugf by cc-by-sa and MIT license