Spring Boot 3多模块Gradle构建nativeCompile后资源文件丢失问题
解决Spring Boot 3原生构建中Liquibase变更日志文件缺失问题
问题分析
在Gradle多项目构建的Spring Boot 3原生镜像场景下,GraalVM的优化机制可能未自动识别到Liquibase的XML变更日志文件,导致应用启动时无法加载classpath:db/changelog/changelog.master.xml。
解决方案
1. 确认Gradle资源目录配置
确保application模块的资源目录被Gradle正确识别,在模块的build.gradle中显式声明sourceSets:
sourceSets { main { resources { srcDirs = ['src/main/resources'] // 按需添加包含规则,确保目标文件被覆盖 include 'db/changelog/**' } } }
执行gradle application:processResources命令后,检查build/resources/main目录下是否存在db/changelog/changelog.master.xml,验证资源是否被正确复制到构建目录。
2. 强制GraalVM包含指定资源
在graalvmNative配置中添加资源包含参数,告知原生构建工具需要打包这些XML文件:
graalvmNative { binaries { main { buildArgs.add('--initialize-at-build-time=org.apache.commons.logging.LogFactory,com.ctc.wstx.util.DefaultXmlSymbolTable,com.ctc.wstx.api.ReaderConfig,com.ctc.wstx.api.CommonConfig,com.ctc.wstx.stax.WstxInputFactory') // 添加Liquibase资源包含规则 buildArgs.add('-H:IncludeResources="db/changelog/.*\\.xml$"') } } }
也可以使用Spring Boot原生资源简化配置:
springBoot { native { resources { includes = ['db/changelog/**'] } } }
3. 升级GraalVM Build Tools插件版本
Spring Boot 3.1.0与0.9.20版本的GraalVM插件兼容性有限,建议升级到适配版本(如0.10.1):
plugins { // ... 其他插件 id 'org.graalvm.buildtools.native' version '0.10.1' }
4. 验证Liquibase配置正确性
确保application.yml或application.properties中Liquibase的变更日志路径配置正确:
spring: liquibase: change-log: classpath:db/changelog/changelog.master.xml
内容的提问来源于stack exchange,提问作者Dmytro Kostyushko
相关产品推荐
相关产品推荐

