spring 无法构建 ClassFile - ArchiveException

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27202939/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 00:14:11  来源:igfitidea点击:

Could not build ClassFile - ArchiveException

springhibernatejpaormentity

提问by myborobudur

We develop an application with spring, jpa, tomcat, maven, etc.

我们用spring、jpa、tomcat、maven等开发了一个应用。

Locally on my developer machine everything works fine but when we deploy the application on a linux server I get the following exception:

在我的开发人员机器上本地一切正常,但是当我们在 linux 服务器上部署应用程序时,出现以下异常:

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.<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$a56856.CGLIB$entityManagerFactory
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet()
(<generated>) org.domain.application.persistence.repository.DataSourceConfiguration$$EnhancerBySpringCGLIB$a56856$$FastClassBySpringCGLIB$eff5a3.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$a56856.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.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.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.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.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)

The exception appears in my code after initializing the database when I call this method:

当我调用此方法时,初始化数据库后,我的代码中出现异常:

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

Can't find the problem. Help is appreciated! Thanks

找不到问题。帮助表示赞赏!谢谢

采纳答案by myborobudur

Thanks to master-slave, I found the problem, as he describes there is a conflict with a incompatible java 8 library of javassist.

感谢master-slave,我发现了问题,正如他描述的那样,与不兼容的 java 8 库 javassist 存在冲突。

In my case, it was a dependency of tiles:

就我而言,它是磁贴的依赖项:

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

回答by Master Slave

The issue can be a conflict between a java version and a javaassist version. If you're using the java 8 on your server you should make sure to use the latest javassist version as well. This blogshows the origin of a conflict being inside the thymeleaf which pulls in an older javassist, the solution being to exclude it from the dependencies

问题可能是 java 版本和 javaassist 版本之间的冲突。如果您在服务器上使用 java 8,则应确保也使用最新的 javassist 版本。该博客显示了 thymeleaf 内部冲突的起源,该冲突引入了较旧的 javassist,解决方案是将其从依赖项中排除

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

your case could be different, so you should inspect the dependency tree to find a suitable solution

您的情况可能有所不同,因此您应该检查依赖关系树以找到合适的解决方案

回答by Luke

I had the exact same issue, in that it worked fine on a development machine and then failed in production.

我遇到了完全相同的问题,因为它在开发机器上运行良好,然后在生产中失败。

The reason can be seen if you build the war file locally and then unzip it. You'll see you end up with two javassist jars:

如果你在本地构建war文件然后解压它就可以看出原因。你会看到你最终得到了两个 javassist jar:

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

which will just be deployed together in the same libfolder. So when your java application loads and it requires a class from the javassistlibrary it will search the classpath and probablyencounter the first (and incorrect) jar and load it.

它将一起部署在同一个lib文件夹中。因此,当您的 java 应用程序加载并且它需要javassist库中的一个类时,它将搜索类路径并可能遇到第一个(并且不正确的)jar 并加载它。

This probablydoesn't happen locally because your buld tool (maven, or in my case gradle) constructs a long intricate classpath of specific resources, in which it probablyspecifies the compatible version first which makes it more probablethat the classpath search will find it.

可能不会在本地发生,因为您的 buld 工具(maven,或者在我的情况下是 gradle)构建了一个长长的复杂的特定资源类路径,其中它可能首先指定兼容版本,这使得类路径搜索更有可能找到它.

(I keep saying probablebecause it will depend on how the classpath searching has been implemented and I think this can depend on the JVM, and other things, but I don't have the impetus to look it up right now but will add it to my TODO list and get back to you... or if anyone else knows the answer please just edit this post!)

(我一直说可能,因为这取决于类路径搜索的实现方式,我认为这可能取决于 JVM 和其他事情,但我现在没有动力查找它,但会将其添加到我的待办事项清单并回复您......或者如果其他人知道答案,请编辑这篇文章!)

Anway, for any gradleusers out there I solved the problem with the following snippet:

Anway,对于gradle那里的任何用户,我使用以下代码段解决了问题:

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

I had to use a global exclusion because the javassist-3.11 library (group: 'javassist') was being pulled in as a dependency of a dependency of a dependency and hibernate wanted the javassist-3.18 library (group: 'org.javassist') instead.

我不得不使用全局排除,因为 javassist-3.11 库(组:'javassist')作为依赖项的依赖项被引入,并且休眠想要 javassist-3.18 库(组:'org.javassist')反而。

Thanks to all invovled, especially master-slave.

感谢所有参与者,尤其是主从

回答by Artur M.

I had a same issue when tried to deploy Java 8 application to Weblogic 12.1.3c. What i did is add this to weblogic.xml:

我在尝试将 Java 8 应用程序部署到 Weblogic 12.1.3c 时遇到了同样的问题。我所做的是将其添加到weblogic.xml

<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.22.0-GA</version>

回答by meno

for me I added the dependency

对我来说,我添加了依赖项

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

回答by Somesh Srivastava

Upgrading below plugin dependency from 2.1 to 3.2.1 solved the issue for me <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.1</version>

将以下插件依赖从 2.1 升级到 3.2.1 为我解决了这个问题 <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.1</version>

回答by Simon Ludwig

I had the same issue with thymleaf 3.0.0.BETA01 and two different javaassist versions. Thymeleaf pulls javaassist 3.11(which causes the error).

我在 thymleaf 3.0.0.BETA01 和两个不同的 javaassist 版本上遇到了同样的问题。Thymeleaf 拉取 javaassist 3.11(导致错误)。

Here is the fixed pom-entry:

这是固定的 pom 条目:

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'

回答by Georgi Stoyanov

I got same exception. I use java 8, hibernate, jpa, jetty.

我有同样的例外。我使用 java 8、hibernate、jpa、jetty。

I solved it by updating these to the latest available version:

我通过将这些更新到最新的可用版本来解决它:

##代码##