복붙노트

[SPRING] ClassFile - ArchiveException을 빌드 할 수 없습니다.

SPRING

ClassFile - ArchiveException을 빌드 할 수 없습니다.

Spring, jpa, tomcat, maven 등으로 응용 프로그램을 개발합니다.

로컬로 내 개발자 컴퓨터에서 모든 것이 잘 작동하지만 리눅스 서버에 응용 프로그램을 배포 할 때 다음 예외가 발생합니다.

org.hibernate.jpa.boot.archive.spi.ArchiveException: Could not build ClassFile
    org.hibernate.jpa.boot.scan.spi.ClassFileArchiveEntryHandler.toClassFile(ClassFileArchiveEntryHandler.java:88)
    org.hibernate.jpa.boot.scan.spi.ClassFileArchiveEntryHandler.handleEntry(ClassFileArchiveEntryHandler.java:65)
    org.hibernate.jpa.boot.archive.internal.JarFileBasedArchiveDescriptor.visitArchive(JarFileBasedArchiveDescriptor.java:176)
    org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:72)
    org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.scan(EntityManagerFactoryBuilderImpl.java:723)
    org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:219)
    org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:186)
    org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider$1.<init>(SpringHibernateJpaPersistenceProvider.java:49)
    org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:49)
    org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:341)
    org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
    org.domain.application.persistence.repository.DataSourceConfiguration.entityManagerFactory(DataSourceConfiguration.java:78)
    org.domain.application.persistence.repository.DataSourceConfiguration$$EnhancerBySpringCGLIB$$52a56856.CGLIB$entityManagerFactory$0(<generated>)
    org.domain.application.persistence.repository.DataSourceConfiguration$$EnhancerBySpringCGLIB$$52a56856$$FastClassBySpringCGLIB$$44eff5a3.invoke(<generated>)
    org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:312)
    org.domain.application.persistence.repository.DataSourceConfiguration$$EnhancerBySpringCGLIB$$52a56856.entityManagerFactory(<generated>)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:483)
    org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
    org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:590)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1113)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1008)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:505)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:636)
    org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:446)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1113)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1008)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:505)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:276)
    org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:129)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1471)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1216)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1081)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1006)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904)
    org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:815)
    org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:743)
    org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1133)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1036)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:505)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1081)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1006)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904)
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514)
    org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:323)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1204)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:725)
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    javax.servlet.GenericServlet.init(GenericServlet.java:158)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
    org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

이 메서드를 호출하면 데이터베이스 초기화 후 예외가 내 코드에 나타납니다.

org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet()

문제를 찾을 수 없습니다. 도움을 주시면 감사하겠습니다! 감사

해결법

  1. ==============================

    1.Java 버전과 javaassist 버전간에 충돌이있을 수 있습니다. 서버에서 java 8을 사용하는 경우 최신 javassist 버전도 사용해야합니다. 이 블로그는 구형 자바 스크립트를 끌어들이는 thymeleaf 내부에 충돌의 근원이 있음을 보여줍니다. 해결책은 의존성에서 그것을 제외시키는 것입니다.

    Java 버전과 javaassist 버전간에 충돌이있을 수 있습니다. 서버에서 java 8을 사용하는 경우 최신 javassist 버전도 사용해야합니다. 이 블로그는 구형 자바 스크립트를 끌어들이는 thymeleaf 내부에 충돌의 근원이 있음을 보여줍니다. 해결책은 의존성에서 그것을 제외시키는 것입니다.

    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf</artifactId>
        <version>${thymeleaf.version}</version>
        <exclusions>
            <exclusion>
                <artifactId>javassist</artifactId>
                <groupId>org.javassist</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    

    귀하의 경우가 다를 수 있으므로 종속성 트리를 검사하여 적합한 솔루션을 찾아야합니다

  2. ==============================

    2.Weblogic 12.1.3c에 Java 8 응용 프로그램을 배포하려고 시도했을 때도 동일한 문제가있었습니다. 내가 한 일은 weblogic.xml에 다음을 추가하는 것입니다.

    Weblogic 12.1.3c에 Java 8 응용 프로그램을 배포하려고 시도했을 때도 동일한 문제가있었습니다. 내가 한 일은 weblogic.xml에 다음을 추가하는 것입니다.

        <wls:prefer-application-packages>
            <wls:package-name>javassist</wls:package-name>
        </wls:prefer-application-packages>
    
  3. ==============================

    3.나는 개발 기계에서 잘 작동하고 생산에 실패했다는 점에서 똑같은 문제가있었습니다.

    나는 개발 기계에서 잘 작동하고 생산에 실패했다는 점에서 똑같은 문제가있었습니다.

    이유는 war 파일을 로컬로 빌드 한 다음 압축을 풀면 볼 수 있습니다. 당신은 두 개의 javassist jar로 끝나는 것을 볼 수 있습니다 :

    javassist-3.11.0.GA.jar
    javassist-3.18.1-GA.jar
    

    동일한 lib 폴더에 함께 배포됩니다. 그래서 자바 애플리케이션이로드 될 때 javassist 라이브러리의 클래스가 필요하다면 classpath를 검색하고 아마도 첫 번째 (그리고 잘못된) jar를 만나로드 할 것입니다.

    buld 도구 (maven 또는 내 경우에는 gradle)가 특정 리소스에 대해 복잡한 복잡한 클래스 패스를 구성하기 때문에 아마도 로컬에서는 발생하지 않을 것입니다.이 클래스는 호환 가능한 버전을 먼저 지정하기 때문에 클래스 패스 검색에서 찾을 가능성이 더 큽니다 .

    (클래스 패스 검색이 어떻게 구현되었는지에 따라 달라지기 때문에 가능성이 높습니다. JVM이나 다른 것들에 의존 할 수 있다고 생각합니다.하지만 지금 당장은 그것을 찾지 않을 것입니다.하지만 그것을 추가 할 것입니다. 내 TODO 목록 및 다시 ... 또는 다른 사람이 대답을 알고 있다면이 게시물을 편집하십시오!)

    어쨌든, 거기에있는 모든 사용자를 위해 나는 다음과 같은 문제를 해결했다.

    configurations {
        all*.exclude group: 'javassist', module: 'javassist' // get rid of hibernate-incompatible javassist
    }
    

    javassist-3.11 라이브러리 (그룹 : 'javassist')는 종속성의 종속성으로 종속되어 있으며 최대 절전 모드는 javassist-3.18 라이브러리 (그룹 : 'org.javassist')를 원했기 때문에 글로벌 제외를 사용해야했습니다. 대신.

    모든 관계자, 특히 마스터 노예 덕분에.

  4. ==============================

    4.master-slave 덕분에, javassist의 호환되지 않는 java 8 라이브러리와의 충돌이 있다고 설명하면서 문제를 발견했습니다.

    master-slave 덕분에, javassist의 호환되지 않는 java 8 라이브러리와의 충돌이 있다고 설명하면서 문제를 발견했습니다.

    필자의 경우, 그것은 타일의 의존성이었다 :

    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-extras</artifactId>
        <version>3.0.5</version>
        <exclusions>
            <exclusion>
                <artifactId>javassist</artifactId>
                <groupId>jboss</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    
  5. ==============================

    5.나는 thymeleaf 3.0.0.BETA01과 두 개의 다른 javassist 버전에 동일한 문제가있었습니다. Thymeleaf는 javaassist 3.11 (오류의 원인이 됨)을 가져옵니다.

    나는 thymeleaf 3.0.0.BETA01과 두 개의 다른 javassist 버전에 동일한 문제가있었습니다. Thymeleaf는 javaassist 3.11 (오류의 원인이 됨)을 가져옵니다.

    다음은 고정 된 항목입니다.

        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>3.0.0.BETA01</version>
            <exclusions>
                <exclusion>
                    <groupId>javassist</groupId>
                    <artifactId>javassist</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
  6. ==============================

    6.나는 같은 예외가있다. 나는 java 8, hibernate, jpa, jetty를 사용한다.

    나는 같은 예외가있다. 나는 java 8, hibernate, jpa, jetty를 사용한다.

    나는 이것을 최신 버전으로 업데이트함으로써 해결했다.

    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.3.3.Final'
    compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.3.3.Final'
    compile group: 'org.hibernate', name: 'hibernate-validator', version: '6.0.11.Final'
    
  7. from https://stackoverflow.com/questions/27202939/could-not-build-classfile-archiveexception by cc-by-sa and MIT license