Liquibase运行报错:找不到Oracle驱动,Gradle环境求助
我之前在Gradle环境下用Liquibase操作Oracle数据库时,也碰到过一模一样的Cannot find database driver: oracle.jdbc.OracleDriver错误——你已经把驱动jar放到libs里并加了compile依赖,但问题出在Liquibase任务并没有拿到这个驱动的classpath,因为compile依赖是给项目代码编译用的,和Liquibase任务的classpath是分开的。
下面是几个亲测有效的解决方案,按优先级排序:
1. 显式给Liquibase任务指定驱动classpath
修改你的build.gradle,先定义一个专门给Liquibase用的配置,然后在任务里指定这个配置作为classpath:
// 定义Liquibase驱动专属配置 configurations { liquibaseDriver } dependencies { // 将Oracle驱动jar加入这个配置 liquibaseDriver files('libs/jdbc-oracle.jar') } task('dev') << { println "executing dev" liquibase { activities { main { changeLogFile changeLog url 'jdbc:oracle:thin:@//localhost:1521/xe' username 'admin' password 'admin' // 关键:让Liquibase使用我们定义的驱动配置 classpath configurations.liquibaseDriver } } } }
这样Liquibase执行时就能找到oracle.jdbc.OracleDriver类了。
2. 改用Liquibase官方Gradle插件(更推荐)
自己写Liquibase任务容易踩classpath的坑,官方插件已经帮我们处理了这些细节。配置方式如下:
// 引入官方插件 plugins { id 'org.liquibase.gradle' version '2.2.0' } // 让Liquibase的runtime配置继承项目的runtime classpath configurations { liquibaseRuntime.extendsFrom runtimeClasspath } dependencies { // 添加Oracle驱动到Liquibase的runtime依赖 liquibaseRuntime files('libs/jdbc-oracle.jar') // 必须添加Liquibase核心依赖(版本可以根据你的需求调整) liquibaseRuntime 'org.liquibase:liquibase-core:4.20.0' } // 配置Liquibase的核心参数 liquibase { activities { main { changeLogFile '你的changelog文件路径' // 比如src/main/db/changelog.xml url 'jdbc:oracle:thin:@//localhost:1521/xe' username 'admin' password 'admin' } } } // 自定义dev任务,依赖官方的liquibaseUpdate任务 task dev(dependsOn: liquibaseUpdate) { doLast { println "executing dev" } }
之后直接运行./gradlew dev就能执行你的逻辑并触发Liquibase更新,省心很多。
3. 先验证驱动jar的有效性
先确认你的jdbc-oracle.jar真的包含oracle.jdbc.OracleDriver类——有时候可能下错了jar包(比如下成了Oracle的工具包而非驱动包)。可以用下面的命令验证:
jar tf libs/jdbc-oracle.jar | grep oracle/jdbc/OracleDriver.class
如果输出为空,说明你需要重新下载正确的驱动包(比如ojdbc8.jar对应Oracle 12c)。
4. 确认Docker中的Oracle可正常连接
最后排除数据库本身的问题:用SQL Developer或者命令行的sqlplus测试连接:
sqlplus admin/admin@//localhost:1521/xe
如果连不上,先检查Docker容器是否正常运行、端口映射是否正确(1521端口是否已经映射到主机)。
内容的提问来源于stack exchange,提问作者Mike3355

