一、報錯信息:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-06-17 19:59:42.456 ERROR 9977 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor.getValidationMode(PersistenceUnitInfoDescriptor.java:88)
The following method did not exist:
javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
The method's class, javax.persistence.spi.PersistenceUnitInfo, is available from the following locations:
jar:file:/Users/wangjun/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar!/javax/persistence/spi/PersistenceUnitInfo.class
jar:file:/Users/wangjun/.m2/repository/jakarta/persistence/jakarta.persistence-api/2.2.3/jakarta.persistence-api-2.2.3.jar!/javax/persistence/spi/PersistenceUnitInfo.class
It was loaded from the following location:
file:/Users/wangjun/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of javax.persistence.spi.PersistenceUnitInfo
Disconnected from the target VM, address: '127.0.0.1:64263', transport: 'socket'
Process finished with exit code 1
二、原因分析:
項目是SpringBoot+mybatis,在pom.xml文件中引入了tk.mybatis的依賴,因爲tk.mybatis會自動引用依賴引入persistence-api-1.0.jar包,而persistence-api-1.0.jar的PersistenceUnitInfo類中並沒有getValidationMode()方法,而在springboot(2.1.0.RELEASE)中自動引入的依賴persistence-api-2.2.jar包的PersistenceUnitInfo類則有實現getValidationMode()方法。此時兩個類衝突了,導致報了以下的錯誤。解決方法就是在tk.mybatis中排除掉persistence-api-1.0.jar的自動依賴
三、解決方法
錯誤的引入方法:
<!--通用Mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
正確的引入方法:
<!--通用Mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
<exclusions>
<exclusion>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
</exclusion>
</exclusions>
</dependency>