Quarkus执行Gradle native构建时PostgreSQL数据源报错如何解决
Quarkus原生构建PostgreSQL数据源报错解决方法
报错根因
两个报错是连续踩坑导致的:
- 第一次构建失败核心原因是缺Quarkus官方适配的PostgreSQL JDBC扩展。Quarkus原生构建走GraalVM静态编译,必须用官方做过元数据适配的扩展,仅靠通用配置识别不到驱动类。
- 手动添加
driver: org.postgresql.Driver的操作踩了旧版本配置的坑:这个配置项在Quarkus 1.3版本标记废弃,1.9版本就彻底移除了,新版本根本不识别这种写法,所以直接抛配置错误。
修复步骤
- 第一步:清理错误配置
先删掉你手动加在datasource层级下的driver: org.postgresql.Driver配置项。另外注意你原来的配置缺了quarkus根节点,Quarkus所有内置配置都要放在这个节点下才会被加载,正确的数据源配置格式参考:quarkus: datasource: db-kind: postgresql username: 替换为你的数据库用户名 password: 替换为你的数据库密码 jdbc: url: jdbc:postgresql://postgres_host_name:port/data_basename max-size: 10 - 第二步:引入官方PostgreSQL JDBC扩展
Gradle项目直接在项目根目录执行以下命令,就能自动把适配好的扩展加进项目依赖:
不想敲命令也可以手动往./gradlew addExtension --extensions="io.quarkus:quarkus-jdbc-postgresql"build.gradle的dependencies块中添加依赖:implementation 'io.quarkus:quarkus-jdbc-postgresql' - 第三步:重新执行构建
配置和依赖都调整完成后,重新运行原生构建命令即可:./gradlew build -Dquarkus.package.type=native
补充说明
不要直接往项目里引入普通的开源PostgreSQL JDBC驱动包,这类通用驱动没有做GraalVM原生镜像的元数据适配,就算配置写对了,构建阶段或者运行时也会出现类找不到、反射调用失败的问题。安装官方的quarkus-jdbc-postgresql扩展后,框架会自动完成驱动类绑定、编译元数据注册,完全不需要手动指定driver类名。
内容的提问来源于stack exchange,提问作者Veera
相关产品推荐
相关产品推荐

