【发布时间】:2021-11-25 10:21:58
【问题描述】:
我将 spring 版本从 4 提高到 5,将 hibernate 从 4 提高到 5。spring-boot 也因为需要更新的弹簧而受到冲击。
<library.spring.version>5.1.6.RELEASE</library.spring.version>
<library.spring-boot.version>2.1.4.RELEASE</library.spring-boot.version>
<library.hibernate.version>5.1.4.Final</library.hibernate.version>
<library.hibernate-validator.version>5.4.3.Final</library.hibernate-validator.version>
<library.jadira-usertype.version>3.1.0.CR1</library.jadira-usertype.version>
<library.javax-validation.version>1.1.0.Final</library.javax-validation.version>
我想我有不兼容的版本。你能告诉我哪些版本是错误的,我应该使用哪个版本?
我明白了:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1778)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:127)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117)
... 25 more
Caused by: java.lang.AbstractMethodError
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:277)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:465)
M.Deinum 回答后我在 pom.xml 中使用的库。删除了 spring 版本及其所有依赖项。
<parent>
....
...
</parent>
....
<properties>
<scm_path>...</scm_path>
<findbugs.threshold>Default</findbugs.threshold>
<findbugs.failOnError>false</findbugs.failOnError>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<library.asm.version>5.0.3</library.asm.version>
<library.camel.version>2.16.1</library.camel.version>
<library.commons-lang3.version>3.4</library.commons-lang3.version>
<library.cooper.version>0.7.1</library.cooper.version>
<library.findbugs.version>1.0.0</library.findbugs.version>
<library.guava.version>21.0</library.guava.version>
<library.commons.version>4.0</library.commons.version>
<library.h2.version>1.4.193</library.h2.version>
<library.javassist.version>3.18.1-GA</library.javassist.version>
<library.jadira-usertype.version>3.1.0.CR1</library.jadira-usertype.version>
<library.javax-validation.version>1.1.0.Final</library.javax-validation.version>
<library.jboss-xnio.version>3.6.2.Final</library.jboss-xnio.version>
<library.jboss-ejb-api_3.2_spec.version>1.0.0.Final</library.jboss-ejb-api_3.2_spec.version>
<library.jboss-transaction-api_1.2_spec.version>1.0.1.Final</library.jboss-transaction-api_1.2_spec.version>
<library.jboss-remote-naming.version>2.0.4.Final</library.jboss-remote-naming.version>
<library.jboss-ejb-client.version>4.0.11.Final</library.jboss-ejb-client.version>
<library.jboss-logging.version>3.3.1.Final</library.jboss-logging.version>
<library.jersey.version>1.19.1</library.jersey.version>
<library.jolokia.version>1.3.3</library.jolokia.version>
<library.junit.version>4.12</library.junit.version>
<library.JUnitParams.version>1.0.6</library.JUnitParams.version>
<library.log4j.version>1.2.17</library.log4j.version>
<library.mockito-all.version>1.10.19</library.mockito-all.version>
<library.saxon-he.version>9.5.1-5</library.saxon-he.version>
<library.servlet-api.version>3.1.0</library.servlet-api.version>
<library.spring-boot.version>2.1.4.RELEASE</library.spring-boot.version>
<library.spring-retry.version>1.2.0.RELEASE</library.spring-retry.version>
<library.itext.version>2.1.7</library.itext.version>
<library.commons-net.version>3.3</library.commons-net.version>
<library.netty.version>4.0.37.Final</library.netty.version>
<library.logback-classic.version>1.1.7</library.logback-classic.version>
<library.ojdbc.version>12.1.0.2</library.ojdbc.version>
<library.posgresql.versionn>42.2.18</library.posgresql.versionn>
<library.tomcat-embed.version>8.5.24</library.tomcat-embed.version>
<library.jgroups.version>3.6.16.Final</library.jgroups.version>
<library.slf4j.version>1.7.5</library.slf4j.version>
<library.wildfly-common.version>1.4.0.Final</library.wildfly-common.version>
<library.woodstox.version>4.2.1</library.woodstox.version>
<wmq.version>9.2.0.2</wmq.version>
<plugin.liquibase-maven-plugin.version>3.5.3</plugin.liquibase-maven-plugin.version>
<plugins.findbugs.version>3.0.4</plugins.findbugs.version>
<duplicate-check.phase>verify</duplicate-check.phase>
</properties>
<modules>
....
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${library.spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>${library.spring-retry.version}</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-codec-http</artifactId>
<version>${library.netty.version}</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-transport-native-epoll</artifactId>
<version>${library.netty.version}</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>${library.mockito-all.version}</version>
</dependency>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>${library.saxon-he.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${library.logback-classic.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${library.commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${library.servlet-api.version}</version>
</dependency>
<dependency>
<groupId>findbugs</groupId>
<artifactId>findbugs</artifactId>
<version>${library.findbugs.version}</version>
</dependency>
<dependency>
<groupId>org.jadira.usertype</groupId>
<artifactId>usertype.core</artifactId>
<version>${library.jadira-usertype.version}</version>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jboss-ejb-client</artifactId>
<version>${library.jboss-ejb-client.version}</version>
</dependency>
<dependency>
<groupId>org.wildfly.common</groupId>
<artifactId>wildfly-common</artifactId>
<version>${library.wildfly-common.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>${library.jboss-logging.version}</version>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jboss-remote-naming</artifactId>
<version>${library.jboss-remote-naming.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.2_spec</artifactId>
<version>${library.jboss-ejb-api_3.2_spec.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.transaction</groupId>
<artifactId>jboss-transaction-api_1.2_spec</artifactId>
<version>${library.jboss-transaction-api_1.2_spec.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.xnio</groupId>
<artifactId>xnio-api</artifactId>
<version>${library.jboss-xnio.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.xnio</groupId>
<artifactId>xnio-nio</artifactId>
<version>${library.jboss-xnio.version}</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>${library.itext.version}</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>${library.commons-net.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>${library.commons-csv.version}</version>
</dependency>
<dependency>
<groupId>pl.pragmatists</groupId>
<artifactId>JUnitParams</artifactId>
<version>${library.JUnitParams.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.xmlunit</groupId>
<artifactId>xmlunit-core</artifactId>
<version>${library.xmlunit-core.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jgroups</groupId>
<artifactId>jgroups</artifactId>
<version>${library.jgroups.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${library.slf4j.version}</version>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.allclient</artifactId>
<version>${wmq.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${library.guava.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${library.commons.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-parent</artifactId>
<version>${library.camel.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${library.spring-boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>${library.spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>${library.spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${library.tomcat-embed.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>${library.tomcat-embed.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>${library.tomcat-embed.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>${library.tomcat-embed.version}</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>${library.asm.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>woodstox-core-asl</artifactId>
<version>${library.woodstox.version}</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>${library.javassist.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>${library.spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>${library.spring-boot.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
....
【问题讨论】:
-
你正试图智取 Spring Boots 初学者,不要。抛弃 spring 版本和 hibernate 版本,使用 spring boot 管理的版本。验证也是如此。
-
@M.Deinum 但我不能使用 spring-boot-starter-parent,因为我有另一个内部父级。我只有 spring-boot-starter 作为依赖项。所以你是说我应该完全删除 spring/hibernate deps?
-
您可以将父级作为依赖项管理部分的一部分导入,这样它至少会管理版本并且您可以获得兼容的版本。只需在
dependencyManagement部分中使用spring-boot-starter-dependencies并使用import作为范围。这样你至少可以获得正确的依赖版本。
标签: spring spring-boot hibernate