我可以使用插件
mvn liquibase:update
和
mvn liquibase:dropAll
正常工作。但是当我尝试使用
mvn liquibase:diff
生成新的变更日志文件时,我收到此错误,但无法解决。
[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
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>
mvn liquibase:update
也没有使用
mvn liquibase:dropAll
。对我来说,它发现
liquibase-maven-plugin
有自己的依赖项,并且
ValidationFactory
中的
jakarta.persistence-api
丢失了。我通过将
jakarta.persistence-api
的依赖项显式添加到 Liquibase 插件来解决了这个问题:
<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>