2016-04-01 4 views
0

Ich verwende die neueste Version von Frühjahr, Winterschlaf und Frühjahr Daten jpa auf einem Großprojekt, aber ich bekomme eine AbstractMethodError Ausnahme. hier ist ein Teil des Stapels SpurHibernate AbstractMethodError

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'EntityManagerFactory' defined in class path resource [com/ashken/config/JPADataConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.persistence.EntityManagerFactory]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.AbstractMethodError 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) ~[na:na] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) ~[na:na] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018) ~[na:na] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) ~[na:na] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[na:na] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[na:na] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[na:na] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[na:na] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[na:na] 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) ~[na:na] 
    ... 93 common frames omitted 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.persistence.EntityManagerFactory]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.AbstractMethodError 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) ~[na:na] 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[na:na] 
    ... 102 common frames omitted 
Caused by: java.lang.AbstractMethodError: null 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:278) ~[na:na] 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444) ~[na:na] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802) ~[na:na] 
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[na:na] 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343) ~[na:na] 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:319) ~[na:na] 
    at com.ashken.config.JPADataConfig.entityManagerFactory(JPADataConfig.java:56) ~[na:na] 
    at com.ashken.config.JPADataConfig$$EnhancerBySpringCGLIB$$a3ded6c2.CGLIB$entityManagerFactory$1(<generated>) ~[na:na] 
    at com.ashken.config.JPADataConfig$$EnhancerBySpringCGLIB$$a3ded6c2$$FastClassBySpringCGLIB$$91e60d8f.invoke(<generated>) ~[na:na] 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[na:na] 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:355) ~[na:na] 
    at com.ashken.config.JPADataConfig$$EnhancerBySpringCGLIB$$a3ded6c2.entityManagerFactory(<generated>) ~[na:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0] 
    at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0] 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[na:na] 

ist dies die gradle Datei

apply plugin: 'java' 
apply plugin: 'eclipse-wtp' 
apply plugin: 'org.akhikhl.gretty' 
apply plugin: "war" 
war { 
    baseName = 'Test' 
    version = '1.0' 
} 

//sourceCompatibility = 1.7 

repositories { 
    mavenLocal() 
    mavenCentral() 
    maven { url "http://repository.pentaho.org/artifactory/repo/" } 
    maven { url "https://repo.spring.io/libs-release" } 
} 

dependencies { 
    // Dependencies goes here 

    compile 'javax.servlet:javax.servlet-api:3.1.0' 
    compile 'org.springframework:spring-webmvc:4.2.5.RELEASE' 
    compile 'org.springframework:spring-context-support:4.2.5.RELEASE' 
    compile 'org.springframework:spring-orm:4.2.5.RELEASE' 
    compile 'org.springframework:spring-jdbc:4.2.5.RELEASE' 
    compile 'org.springframework:spring-tx:4.2.5.RELEASE' 
    compile 'org.springframework:spring-aop:4.2.5.RELEASE' 

    compile 'org.springframework.security:spring-security-core:4.0.4.RELEASE' 
    compile 'org.springframework.security:spring-security-web:4.0.4.RELEASE' 
    compile 'org.springframework.security:spring-security-config:4.0.4.RELEASE' 
    compile 'org.springframework.security.oauth:spring-security-oauth2:2.0.8.RELEASE' 

    compile 'org.springframework.data:spring-data-jpa:1.9.4.RELEASE' 
    compile 'org.springframework.data:spring-data-mongodb:1.8.2.RELEASE' 
    compile 'org.springframework.data:spring-data-envers:0.3.0.RELEASE' 

    compile 'javax.servlet:jstl:1.2' 
    compile 'org.hibernate:hibernate-core:5.1.0.Final' 
    compile 'org.hibernate:hibernate-entitymanager:5.1.0.Final' 
    compile 'org.hibernate:hibernate-validator:5.2.4.Final' 

    compile 'org.apache.commons:commons-dbcp2:2.1.1' 

    compile 'mysql:mysql-connector-java:5.1.38' 
    compile 'org.postgresql:postgresql:9.4.1207.jre7' 


    compile 'com.fasterxml.jackson.core:jackson-core:2.7.3' 
    compile 'com.fasterxml.jackson.core:jackson-databind:2.7.3' 
    compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.3' 

    compile 'org.apache.poi:poi:3.13' 
    compile 'net.sf.jasperreports:jasperreports:6.2.0' 

    compile 'org.apache.logging.log4j:log4j-core:2.5' 
    compile 'org.apache.logging.log4j:log4j-api:2.5' 
    compile 'commons-fileupload:commons-fileupload:1.3.1' 
    compile 'commons-io:commons-io:2.4' 
    compile 'commons-logging:commons-logging:1.2' 

    compile 'com.itextpdf:itextpdf:5.5.8' 
    compile 'com.lowagie:itext:2.1.7' 
    compile 'org.olap4j:olap4j:1.1.0' 

    compile 'org.thymeleaf:thymeleaf-spring4:3.0.0.BETA01' 
} 

//Gretty Embedded Jetty 
buildscript { 
    repositories { 
    jcenter() 
    } 

    dependencies { 
    classpath 'org.akhikhl.gretty:gretty:+' 
    } 
} 
gretty { 
    port = 8080 
    contextPath = '/' 
    servletContainer = 'jetty9' //tomcat7 or tomcat8 
} 

eclipse { 

    wtp { 
    component { 

     //define context path, default to project folder name 
     contextPath = '/' 

    } 

    } 
} 

und meine JPA Config-Klasse, die mir nie

mit einer älteren Version der Artefakte Probleme gibt
package com.ashken.config; 

import java.util.Properties; 

import javax.persistence.EntityManagerFactory; 
import javax.sql.DataSource; 

import org.apache.commons.dbcp2.BasicDataSource; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.core.env.Environment; 
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; 
import org.springframework.orm.jpa.JpaTransactionManager; 
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; 
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 



@Configuration 
@EnableJpaRepositories(entityManagerFactoryRef="EntityManagerFactory",transactionManagerRef="TransactionManager", basePackages="com.ashken.repositories") 
@EnableTransactionManagement 
public class JPADataConfig { 

    @Autowired 
    Environment environment; 

    @Bean(name = "DataSource") 
    public DataSource getAuthDataSource() 
    { 
     BasicDataSource ds = new BasicDataSource(); 
     ds.setDriverClassName("com.mysql.jdbc.Driver"); 
     ds.setUrl("jdbc:mysql://localhost:3306/ngo"); 
     ds.setUsername("root"); 
     ds.setPassword(""); 
     return ds; 
    } 

    @Autowired 
    @Bean(name="EntityManagerFactory") 
    EntityManagerFactory entityManagerFactory(@Qualifier("DataSource") DataSource dataSource) { 

     LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); 
     entityManagerFactoryBean.setDataSource(dataSource); 
     entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); 
     entityManagerFactoryBean.setPackagesToScan("com.ashken.entities"); 

     Properties jpaProperties = new Properties(); 
     jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); 
     jpaProperties.setProperty("hibernate.hbm2ddl.auto", "update"); 
     jpaProperties.setProperty("hibernate.connection.autocommit", "false"); 
     //jpaProperties.setProperty("hibernate.show_sql", "true"); 
     entityManagerFactoryBean.setJpaProperties(jpaProperties); 
     entityManagerFactoryBean.afterPropertiesSet(); 

     return entityManagerFactoryBean.getObject(); 
    } 


    @Autowired 
    @Bean(name = "TransactionManager") 
     JpaTransactionManager transactionManager(@Qualifier("EntityManagerFactory") EntityManagerFactory entityManagerFactory) { 
      JpaTransactionManager transactionManager = new JpaTransactionManager(); 
      transactionManager.setEntityManagerFactory(entityManagerFactory); 
      return transactionManager; 
     } 

} 
+0

Warum brauchen Sie diese Abhängigkeit 'org.springframework.data:spring-data-mongodb:1.8.2.RELEASE'? –

Antwort

1

Wie Sie wahrscheinlich wissen, wird AbstractMethodError manchmal von JAR incompability verursacht. Ich versuchte, mich selbst Ihre gradle bauen und fand Dinge, die wahrscheinlich dieses Problem verursacht, indem Sie Ihre WAR-Datei suchen:

  1. Sie verwenden alte Version von Hibernate-envers. Sie fragen nicht nach, aber Sie erklären Abhängigkeit zu Spring-Data-Envers (und damit Spring-Data-Envers benötigt die Hibernate-Enver JAR), die wahrscheinlich das Problem verursacht.

  2. Ich sehe, dass Sie ein Duplikat von bcmail-jdk14-138.jar, bcprov-jdk14-138.jar und stax-api-1.0.x.jar haben. Entfernen Sie eines von ihnen, um Ihr Problem zu lösen.

Edit: Einige dieser Gläser aus Sache kommen genannt transitive Abhängigkeiten, die sehr häufig ist und natürlich sowohl in maven und gradle. Der Konflikt kommt, wenn verschiedene Bibliotheken/Framework die gleichen Abhängigkeiten zu einer anderen Bibliothek haben, die unterschiedliche Version haben.

Zum Beispiel haben Winterschlaf und Frühling die gleiche Abhängigkeit von cglib. Aber Hibernate deklarieren, dass sie von cglib-1.2 abhängen, während Frühling entschied, hängt von cglib-1.0 ab. Am Ende, wenn Sie Ihren WAR (oder JAR mit seinen Abhängigkeiten) erstellen, bringt Ihr Build sowohl cglib-1.0 als auch cglib-1.2.

wie kann ich von ihnen

loswerden könnten Sie versuchen, auszuführen:

gradle dependencies 

oder die Zusammenarbeit mit provided variants und dann ausschließen doppelte Gläser mit Abhängigkeiten in Ihrem build.gradle erklärt wie folgt:

compile ('com.lowagie:itext:2.1.7') { 
    exclude group: 'org.bouncycastle', module: 'bcmail-jdk14' 
} 

Wenn Sie th gefunden haben bei Ihnen nicht wohl diff-ing doppelte Abhängigkeiten mit der Befehlszeile sind, können Sie versuchen zu:

  1. apply plugin: "maven" auf Ihre build.gradle Hinzufügen und dann gradle install Befehl ausführen.

  2. Kopieren Sie in <project-root-dir>/build pom-default.xml in <project-root-dir>/pom.xml.

  3. Öffnen Sie dieses Projekt mit Eclipse mit m2eclipse-Unterstützung (Ich denke, alle neuesten Eclipse-Version sollte Maven unterstützen).

  4. Öffnen Sie Ihre pom.xml und ändern Sie die Registerkarte zu "Dependency Hierarchy" und Sie können Abhängigkeiten im rechten Bereich "ausschließen". In pom.xml wird ausgeschlossen Abhängigkeiten markieren mit

    <exclusion> .... </exclusion>

  5. Trans ausgeschlossen libs/Gläser, die bereits in pom.xml zu Ihrem build.gradle erklärt.

Hoffe, dass hilft.

+0

Woher kommen die Duplikate und wie werde ich sie los? – Ashken

Verwandte Themen