Hibernate 抽象方法错误
Hibernate AbstractMethodError
我在 gradle 项目上使用最新版本的 spring、hibernate 和 spring data jpa,但出现 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.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(<generated>) ~[na:na]
at com.ashken.config.JPADataConfig$$EnhancerBySpringCGLIB$$a3ded6c2$$FastClassBySpringCGLIB$e60d8f.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]
这是 gradle 文件
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 = '/'
}
}
}
和我的 jpa 配置 class,它从来没有给我带来旧版本工件的问题
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;
}
}
您可能知道,AbstractMethodError 有时是由 引起的。我自己尝试了您的 gradle 构建,并通过查看您的 WAR 文件发现了可能导致此问题的因素:
您使用的是旧版本的 hibernate-envers。您没有要求这个,但您声明了对 spring-data-envers 的依赖(因此 spring-data-envers 需要 hibernate-envers JAR),这可能会导致问题。
我看到您有 bcmail-jdk14-138.jar、bcprov-jdk14-138.jar 和 stax-api-1 的副本。0.x.jar。删除其中一个可能会解决您的问题。
编辑:
其中一些 jar 来自名为 transitive dependencies 的东西,这在 maven and gradle 中非常常见和自然。当不同的 libraries/framework 对另一个具有 不同版本 .
的库具有相同的依赖性时,就会发生冲突
例如,hibernate 和 spring 将对 cglib 具有相同的依赖性。但是 hibernate 声明它们依赖于 cglib-1.2,而 spring 决定依赖于 cglib-1.0。最后,当您构建 WAR(或具有其依赖项的 JAR)时,您的构建将带来 cglib-1.0 和 cglib-1.2。
how do i get rid of them
你可以尝试执行:
gradle dependencies
或者使用任何 provided variants,然后在 build.gradle 中排除重复的 jar,如下所示:
compile ('com.lowagie:itext:2.1.7') {
exclude group: 'org.bouncycastle', module: 'bcmail-jdk14'
}
如果您发现自己不习惯使用命令行区分重复依赖项,您可以尝试:
将apply plugin: "maven"
添加到您的build.gradle,然后执行gradle install
命令。
在<project-root-dir>/build
中复制pom-default.xml到<project-root-dir>/pom.xml
.
用支持m2eclipse的eclipse打开这个项目(我认为所有最新的eclipse版本都应该支持maven)。
打开 pom.xml 并将选项卡更改为 "Dependency Hierarchy",您可以在右侧面板中 "exclude" 依赖项。在 pom.xml
中,排除的依赖项将标记为
<exclusion> .... </exclusion>
将已在 pom.xml
中声明的排除的 libs/jars 转换为您的 build.gradle
.
希望对您有所帮助。
我在 gradle 项目上使用最新版本的 spring、hibernate 和 spring data jpa,但出现 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.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(<generated>) ~[na:na]
at com.ashken.config.JPADataConfig$$EnhancerBySpringCGLIB$$a3ded6c2$$FastClassBySpringCGLIB$e60d8f.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]
这是 gradle 文件
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 = '/'
}
}
}
和我的 jpa 配置 class,它从来没有给我带来旧版本工件的问题
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;
}
}
您可能知道,AbstractMethodError 有时是由
您使用的是旧版本的 hibernate-envers。您没有要求这个,但您声明了对 spring-data-envers 的依赖(因此 spring-data-envers 需要 hibernate-envers JAR),这可能会导致问题。
我看到您有 bcmail-jdk14-138.jar、bcprov-jdk14-138.jar 和 stax-api-1 的副本。0.x.jar。删除其中一个可能会解决您的问题。
编辑: 其中一些 jar 来自名为 transitive dependencies 的东西,这在 maven and gradle 中非常常见和自然。当不同的 libraries/framework 对另一个具有 不同版本 .
的库具有相同的依赖性时,就会发生冲突例如,hibernate 和 spring 将对 cglib 具有相同的依赖性。但是 hibernate 声明它们依赖于 cglib-1.2,而 spring 决定依赖于 cglib-1.0。最后,当您构建 WAR(或具有其依赖项的 JAR)时,您的构建将带来 cglib-1.0 和 cglib-1.2。
how do i get rid of them
你可以尝试执行:
gradle dependencies
或者使用任何 provided variants,然后在 build.gradle 中排除重复的 jar,如下所示:
compile ('com.lowagie:itext:2.1.7') {
exclude group: 'org.bouncycastle', module: 'bcmail-jdk14'
}
如果您发现自己不习惯使用命令行区分重复依赖项,您可以尝试:
将
apply plugin: "maven"
添加到您的build.gradle,然后执行gradle install
命令。在
<project-root-dir>/build
中复制pom-default.xml到<project-root-dir>/pom.xml
.用支持m2eclipse的eclipse打开这个项目(我认为所有最新的eclipse版本都应该支持maven)。
打开 pom.xml 并将选项卡更改为 "Dependency Hierarchy",您可以在右侧面板中 "exclude" 依赖项。在
pom.xml
中,排除的依赖项将标记为<exclusion> .... </exclusion>
将已在
pom.xml
中声明的排除的 libs/jars 转换为您的build.gradle
.
希望对您有所帮助。