Reputation: 57
I'm integrating liquibase-maven-plugin into my spring boot project.
I can use the plugin for mvn liquibase:update
and mvn liquibase:dropAll
work correctly.
But when I try to use the mvn liquibase:diff
to generate the new changelog files, I get this error that I'm unable to resolve.
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:4.23.2:diff (default-cli) on project work-with-liquibase: Execution default-cli of goal org.liquibase:liquibase-maven-plugin:4.23.2:diff failed: A required class was missing while executing org.liquibase:liquibase-maven-plugin:4.23.2:diff: jakarta/validation/ValidatorFactory
Can you help me understand what dependencies the plugin needs? Are there perhaps errors of incompatible versions? The documentation is not very clear about this. Thanks in advance to anyone who will try to help me.
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.1</version>
<relativePath/>
</parent>
<properties>
<spring.boot.version>${project.parent.version}</spring.boot.version>
<java.version>17</java.version>
<liquibase.maven>4.23.2</liquibase.maven>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>${liquibase.maven}</version>
</dependency>
</dependencies>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.maven}</version>
<configuration>
<propertyFile>src/main/resources/liquibase/liquibase-local.properties</propertyFile>
</configuration>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>${liquibase.maven}</version>
</dependency>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate6</artifactId>
<version>${liquibase.maven}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>${spring.boot.version}</version>
</dependency>
</dependencies>
</plugin>
liquibase-local.properties
driver: org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/my-db
username=username
password=password
changeLogFile=src/main/resources/liquibase/changelog/db.changelog-master.xml
outputChangeLogFile=src/main/resources/liquibase/changelog/db.changelog-master.xml
diffChangeLogFile=src/main/resources/liquibase/changelog/db.changelog_new.sql
databaseChangeLogTableName=myproject_databasechangelog
databaseChangeLogLockTableName=myproject_databasechangeloglock
referenceUrl=hibernate:spring:com.myproject.entities?dialect=org.hibernate.dialect.PostgreSQLDialect&hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
#referenceUrl=hibernate:spring:com.myproject.entities?dialect=org.hibernate.dialect.PostgreSQLDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
db.changelog-master.xml
<?xml version="1.0" encoding="UTF-8" ?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<include file="liquibase/changelog/db.changelog_v1.sql" relativeToChangelogFile="false"/>
<include file="liquibase/changelog/db.changelog_v2.sql" relativeToChangelogFile="false"/>
</databaseChangeLog>
Upvotes: 0
Views: 730
Reputation: 11
I faced literally same scenario, except I didn't use mvn liquibase:update
nor mvn liquibase:dropAll
.
For me it finds out that liquibase-maven-plugin
has its own dependencies and ValidationFactory
from jakarta.persistence-api
was missing. I fixed the issue by adding dependency to jakarta.persistence-api
explicitly to Liquibase plugin:
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.version}</version>
<dependencies>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>${jakarta.validation.api.version}</version>
</dependency>
</dependencies>
</plugin>
Upvotes: 1