记一次部署时报java.lang.NoSuchMethodError:javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljav
Posted 蜗小稂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次部署时报java.lang.NoSuchMethodError:javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljav相关的知识,希望对你有一定的参考价值。
楼主在部署war包的时候,本地启动不报错,服务器商报如下问题:
Error creating bean with name ‘entityManagerFactory‘ defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
这个方法明显是jar包下的方法找不到,而非自写的方法或者类;但是我们又在pom文件中引用了该类,且在war包解压lib文件中确实有此类;
网上很多说是依赖项版本问题,说因为引入了JPA 1 API,但方法getValidationMode仅在JPA 2之后才存在,建议将pom文件中jpa依赖改成如下:
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>
但楼主本来就用的JPA 2版本;最后只能怀疑是jar包冲突,
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.1.4</version> <exclusions> <exclusion> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> </exclusion> </exclusions> </dependency>
将pom中依赖修改为此问题就解决了!!
此处需要exclusions来进行排除依赖。
例如这样一个情况,工程中引入了A,A依赖B,但是B的版本过旧。
此时可以使用exclusions排除该传递性依赖,并显示声明一个最新版本的B依赖。
所以。。。。。此处就不会根据mapper-spring-boot-starter找到其底下老版本的persistence而导致没有ValidationMode方法了,通过exclusions声明一个新依赖,就成功解决问题啦~
以上~
以上是关于记一次部署时报java.lang.NoSuchMethodError:javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljav的主要内容,如果未能解决你的问题,请参考以下文章
Chrome CustomTab 错误:java.lang.NoSuchMethodError:没有静态方法 startActivity