Spring Webflux Fat Jar中Liquibase CustomChange类找不到问题求助
解决Liquibase CustomChange类找不到的问题
问题根源
执行mvn clean install -Plocal时,Liquibase Maven插件的类加载器无法访问到项目中编译后的自定义变更类——因为此时Fat Jar还未生成,而插件默认的类路径不包含项目自身的编译输出目录。
解决方案
1. 配置Liquibase Maven插件的类路径
在pom.xml的Liquibase插件配置中,显式添加项目编译后的class目录到插件的类路径里:
<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>${liquibase.version}</version> <configuration> <changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile> <!-- 其他原有配置(如数据库url、用户名等) --> <classpath>${project.build.directory}/classes</classpath> </configuration> </plugin>
或者通过依赖声明的方式添加:
<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>${liquibase.version}</version> <configuration> <!-- 其他原有配置 --> </configuration> <dependencies> <dependency> <groupId>com.abl.rjmdb</groupId> <artifactId>你的项目artifactId</artifactId> <version>${project.version}</version> <scope>system</scope> <systemPath>${project.build.directory}/classes</systemPath> </dependency> </dependencies> </plugin>
配置后,Liquibase插件就能在构建阶段找到自定义的DoNothingChange类。
2. 切换Liquibase执行时机(可选)
如果自定义变更仅需在应用运行时执行,而非maven构建阶段,可以将Liquibase的执行绑定到Spring Boot启动流程:
- 引入Spring Boot集成Liquibase的依赖:
spring-boot-starter-liquibase - 在
application.yml/application.properties中配置Liquibase的changelog路径等参数 - 此时自定义变更类会被Spring Boot Fat Jar的类加载器加载,不会出现找不到的问题
3. 核对类路径与变更文件引用
确认changelog XML文件中customChange的class属性完全匹配类的全限定名:
<customChange class="com.abl.rjmdb.liquibase.DoNothingChange"> <!-- 自定义参数(若有) --> </customChange>
同时检查该类已正确编译到target/classes目录下。
内容的提问来源于stack exchange,提问作者AmitBL
相关产品推荐
相关产品推荐

