Liquibase Generate Diff with Springboot 3

Liquibase Generate Diff with Springboot 3

I'm trying to generate liquibase-scripts with liquibase 4.18.0 and Spring Boot 3.0.1.

And i'm getting this error:

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:4.18.0:diff (default-cli) on project ims-backend: Execution default-cli of goal org.liquibase:liquibase-maven-plugin:4.18.0:diff failed: An API incompatibility was encountered while executing org.liquibase:liquibase-maven-plugin:4.18.0:diff: java.lang.NoSuchMethodError: 'javax.persistence.spi.PersistenceUnitInfo org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.obtainDefaultPersistenceUnitInfo()'
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.liquibase:liquibase-maven-plugin:4.18.0
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/C:/Users/XXXX/.m2/repository/org/liquibase/liquibase-maven-plugin/4.18.0/liquibase-maven-plugin-4.18.0.jar
[ERROR] urls[1] = file:/C:/Users/XXXX/.m2/repository/org/liquibase/liquibase-core/4.18.0/liquibase-core-4.18.0.jar
[ERROR] urls[2] = file:/C:/Users/XXXX/.m2/repository/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar
[ERROR] urls[3] = file:/C:/Users/XXXX/.m2/repository/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar
[ERROR] urls[4] = file:/C:/Users/XXXX/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar
[ERROR] urls[5] = file:/C:/Users/XXXX/.m2/repository/com/opencsv/opencsv/5.7.1/opencsv-5.7.1.jar
[ERROR] urls[6] = file:/C:/Users/XXXX/.m2/repository/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar
[ERROR] urls[7] = file:/C:/Users/XXXX/.m2/repository/org/apache/commons/commons-text/1.10.0/commons-text-1.10.0.jar
[ERROR] urls[8] = file:/C:/Users/XXXX/.m2/repository/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar
[ERROR] urls[9] = file:/C:/Users/XXXX/.m2/repository/org/liquibase/liquibase-commercial/4.18.0/liquibase-commercial-4.18.0.jar
[ERROR] urls[10] = file:/C:/Users/XXXX/.m2/repository/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[maven.api, parent: null]]
[ERROR]

It seems that

org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.obtainDefaultPersistenceUnitInfo()

returns now

jakarta.persistence.spi.PersistenceUnitInfo

instead of

javax.persistence.spi.PersistenceUnitInfo

Is there anyting i can do about it, or is the only option to wait for a new liquibase version?

1

1 Answer

Ok i could fix the problem when using liquibase-hibernate6 instead of liquibase-hibernate5

<dependency>
    <groupId>org.liquibase.ext</groupId>
    <artifactId>liquibase-hibernate6</artifactId>
    <version>${liquibase.version}</version>
    <scope>test</scope>
</dependency>

But i had to override liquibase.version to 4.18.0 in my project, because it is only available for 4.18 and spring boot currently uses 4.17

<liquibase.version>4.18.0</liquibase.version>

Furthermore i had to change

hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

into

hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Marcus Vance
Author

Marcus Vance

Marcus Vance is a cybersecurity auditor and technology writer dedicated to educating the public about online safety, data privacy regulations, enterprise security, and emerging cyber threats.