springboot JPA项目部署JBOSS出错

springboot 1.5.9.RELEASE,项目用到JPA,部署到EPA6.4 JBOSS时出现

Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
   at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:1100) [hibernate-core-5.0.12.Final.jar:5.0.12.Final]
   at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:772) [hibernate-core-5.0.12.Final.jar:5.0.12.Final]
   at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245) [hibernate-core-5.0.12.Final.jar:5.0.12.Final]
   at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222) [hibernate-core-5.0.12.Final.jar:5.0.12.Final]
   at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265) [hibernate-core-5.0.12.Final.jar:5.0.12.Final]
   at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) [hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
   at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) [hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
   at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) [spring-orm-4.3.13.RELEASE.jar:4.3.13.RELEASE]
   at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:360) [spring-orm-4.3.13.RELEASE.jar:4.3.13.RELEASE]
   at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:382) [spring-orm-4.3.13.RELEASE.jar:4.3.13.RELEASE]
   at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:371) [spring-orm-4.3.13.RELEASE.jar:4.3.13.RELEASE]
   at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:336) [spring-orm-4.3.13.RELEASE.jar:4.3.13.RELEASE]
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
   ... 29 more


查询得知是jar包版本不同引起的错误导致部署失败。

在idea编辑器中,打开Terminal输入mvn dependency:tree 查看项目引用的jar包。

发现引用的是org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final

但是安装的JBOSS6.4版本用的是org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final版本。

由此得到造成该bug的原因是自己引用的jar和容器自己引用的jar版本冲突造成。


解决方案如下:

在springboot项目中,添加webapp/WEN-INF/目录,在该目录下添加jboss-deployment-structure.xml,xml内容如下。

项目结构图如下



在该目录下添加jboss-deployment-structure.xml,xml内容如下。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
   <deployment>
      <exclude-subsystems>
         <subsystem name="jpa" />
      </exclude-subsystems>
      <exclusions>
          <module name="org.jboss.logging" />
          <module name="javaee.api" />
         <module name="javax.persistence.api" />
         <module name="org.hibernate" />
         <module name="org.slf4j" /> 
         <module name="org.slf4j.impl" />
         <module name="org.slf4j.jcl-over-slf4j" />
      </exclusions>
   </deployment>
</jboss-deployment-structure>


猜你喜欢

转载自blog.csdn.net/u011160656/article/details/78809399