You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot3+JDK17执行liquibase:diff报NoSuchMethodError求助

问题:Spring Boot 3 + JDK17执行liquibase:diff时出现NoSuchMethodError错误

执行Maven命令liquibase:diff时触发如下错误:

Caused by: java.lang.NoSuchMethodError: 'javax.persistence.spi.PersistenceUnitInfo org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.obtainDefaultPersistenceUnitInfo()'
	at liquibase.ext.hibernate.database.HibernateSpringPackageDatabase.createEntityManagerFactoryBuilder (HibernateSpringPackageDatabase.java:86)
	at liquibase.ext.hibernate.database.HibernateEjb3Database.buildMetadataFromPath (HibernateEjb3Database.java:57)

我的pom.xml中liquibase相关配置如下:

<profile>
        <id>liquibase</id>

        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.liquibase</groupId>
                    <artifactId>liquibase-maven-plugin</artifactId>
                    <version>4.4.1</version>

                    <configuration>
                        <propertyFile>src/main/resources/liquibase.properties</propertyFile>
                        <changeLogFile>src/main/resources/db/db.changelog-master.xml</changeLogFile>
                        <diffChangeLogFile>src/main/resources/db/changelog/${maven.build.timestamp}_changelog.xml</diffChangeLogFile>
                        <logging>info</logging>
                    </configuration>
                    <executions>
                        <execution>
                            <id>update-profile</id>
                            <phase>process-resources</phase>
                            <goals>
                                <goal>update</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>diff-profile</id>
                            <phase>process-test-resources</phase>
                            <goals>
                                <goal>diff</goal>
                            </goals>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>8.0.26</version>
                        </dependency>
                        <dependency>
                            <groupId>org.liquibase.ext</groupId>
                            <artifactId>liquibase-hibernate5</artifactId>
                            <version>4.19.0</version>
                        </dependency>
                        <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-jdbc</artifactId>
                            <version>6.0.6</version>
                        </dependency>
                        <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-context</artifactId>
                            <version>6.0.6</version>
                        </dependency>
                        <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-orm</artifactId>
                            <version>6.0.6</version>
                        </dependency>
                        <dependency>
                            <groupId>org.springframework.data</groupId>
                            <artifactId>spring-data-jpa</artifactId>
                            <version>3.0.3</version>
                        </dependency>
                        <dependency>
                            <groupId>org.javassist</groupId>
                            <artifactId>javassist</artifactId>
                            <version>3.29.0-GA</version>
                        </dependency>
                        
                        <dependency>
                            <groupId>jakarta.persistence</groupId>
                            <artifactId>jakarta.persistence-api</artifactId>
                            <version>3.1.0</version>
                        </dependency>
                        
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </profile> 

我已经尝试在liquibase插件下添加不同依赖,现在疑惑:JDK17中javax.persistence是否已被jakarta.persistence替代?


解决方案

核心结论

是的,Spring Boot 3基于Jakarta EE 9+规范,已经全面从javax.persistence迁移到jakarta.persistence,这是导致错误的根本原因。你的配置中存在以下几个问题:

  1. liquibase-hibernate5版本不兼容:liquibase-hibernate5是为Hibernate 5设计的,而Hibernate 5依赖的是javax.persistence API,和Spring Boot 3使用的Jakarta API冲突。
  2. liquibase-maven-plugin版本过旧:4.4.1版本的插件对Jakarta API支持不足,无法适配Spring Boot 3的环境。

修改步骤

  • 替换liquibase-hibernate5为liquibase-hibernate6(适配Hibernate 6,支持Jakarta API)
  • 升级liquibase-maven-plugin到支持Jakarta的版本(推荐4.24.0及以上)
  • 确保所有依赖均为Jakarta版本,移除任何残留的javax相关依赖

修改后的插件配置示例:

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>4.24.0</version> <!-- 升级到支持Jakarta的版本 -->

    <configuration>
        <propertyFile>src/main/resources/liquibase.properties</propertyFile>
        <changeLogFile>src/main/resources/db/db.changelog-master.xml</changeLogFile>
        <diffChangeLogFile>src/main/resources/db/changelog/${maven.build.timestamp}_changelog.xml</diffChangeLogFile>
        <logging>info</logging>
    </configuration>
    <executions>
        <execution>
            <id>update-profile</id>
            <phase>process-resources</phase>
            <goals>
                <goal>update</goal>
            </goals>
        </execution>
        <execution>
            <id>diff-profile</id>
            <phase>process-test-resources</phase>
            <goals>
                <goal>diff</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <dependency>
            <groupId>org.liquibase.ext</groupId>
            <artifactId>liquibase-hibernate6</artifactId> <!-- 替换为hibernate6版本 -->
            <version>4.24.0</version> <!-- 和插件版本保持一致 -->
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>6.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>6.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.29.0-GA</version>
        </dependency>
        
        <dependency>
            <groupId>jakarta.persistence</groupId>
            <artifactId>jakarta.persistence-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
</plugin>

修改后重新执行liquibase:diff命令即可解决该错误。


内容的提问来源于stack exchange,提问作者Anurag Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:07:14