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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章