使用Gradle时FlywayDB的类路径及外部JAR添加方法咨询
解决Flyway Gradle插件无法从外部JAR加载迁移脚本的问题
你的问题核心在于Flyway Gradle插件默认使用的类路径和项目编译类路径是相互独立的,这也是为什么你把JAR加到compile配置里却没生效的原因——Flyway根本没去读这个类路径。
下面我来拆解问题和你修改后的正确配置逻辑:
问题根源
Flyway Gradle插件在执行迁移任务时,默认只会使用buildscript块中声明的依赖类路径,以及插件自身的类路径。你之前添加的compile依赖是给项目源码编译用的,和Flyway的执行类路径完全不搭边,自然找不到JAR里的META-INF/db目录。
你的修改为什么能生效(正确配置逻辑)
你调整后的build.gradle完全踩中了要点,我帮你梳理下每个关键部分:
自定义Flyway专属类路径配置
首先定义一个flywayClasspath配置,用来专门存放Flyway执行时需要访问的JAR和资源目录:configurations { flywayClasspath }添加外部资源到自定义配置
把你的外部JAR目录和classes目录都加到这个自定义配置里,确保Flyway能访问到这些资源:dependencies { flywayClasspath fileTree(dir: '/workspace/WEB-INF/lib', include: '*.jar') flywayClasspath files('/workspace/WEB-INF/classes') }指定Flyway使用这个自定义类路径
在flyway配置块里通过configurations = [ 'flywayClasspath' ]告诉插件:"别用默认类路径了,就用我给你的这个"。这样Flyway在查找classpath:/META-INF/db/mysql下的迁移脚本时,就会去你指定的JAR和目录里找:flyway { configurations = [ 'flywayClasspath' ] // 其他数据库连接等配置... locations = [ "classpath:/META-INF/db/mysql" ] }
这样配置后,Flyway就能正确识别外部JAR里的迁移脚本,执行迁移操作了。
内容的提问来源于stack exchange,提问作者Werzi2001
相关产品推荐
相关产品推荐

