Gradle预编译脚本插件执行quarkusDev时找不到Quarkus外部插件依赖
背景
我目前正在开发包含多个Quarkus微服务的Gradle多项目,为了统一封装Quarkus依赖配置,我使用带kotlin-dsl的预编译脚本插件实现配置复用。按当前配置执行quarkusBuild任务可正常运行。
问题
对微服务子项目执行quarkusDev任务时失败,报错信息如下:Unable to find quarkus-gradle-plugin dependency in project ':microservice'
我尝试排查了很久一直没定位到根因,相关公开issue给出的解决方案对我的场景无效,求帮忙排查。
补充说明
我发现gradle.plugin.io.quarkus:quarkus-gradle-plugin:2.2.3.Final和io.quarkus:gradle-application-plugin:2.2.3.Final可能存在差异,但互换这两个依赖后问题依旧没有解决。
项目配置
以下是可复现问题的最小项目结构:
rootProject - buildSrc - src/main/kotlin quarkus-conventions.gradle.kts build.gradle.kts settings.gradle.kts gradle.properties - microservice - src/... build.gradle.kts build.gradle.kts settings.gradle.kts gradle.properties
rootProject/buildSrc/src/main/kotlin/quarkus-conventions.gradle.kts
plugins { java id("io.quarkus") } val quarkusUniverseBomVersion: String by project dependencies { implementation(enforcedPlatform("io.quarkus:quarkus-universe-bom:$quarkusUniverseBomVersion")) implementation("io.quarkus:quarkus-kotlin") implementation("io.quarkus:quarkus-resteasy-reactive") implementation("io.quarkus:quarkus-resteasy-reactive-jackson") implementation("io.quarkus:quarkus-hibernate-reactive-panache") implementation("io.quarkus:quarkus-reactive-pg-client") implementation("io.quarkus:quarkus-smallrye-reactive-messaging-amqp") implementation("io.quarkus:quarkus-arc") testImplementation("io.quarkus:quarkus-junit5") }
rootProject/buildSrc/build.gradle.kts
val quarkusPluginVersion: String by project plugins { `kotlin-dsl` } repositories { mavenCentral() maven("https://plugins.gradle.org/m2/") gradlePluginPortal() } dependencies { implementation("io.quarkus:gradle-application-plugin:${quarkusPluginVersion}") }
rootProject/buildSrc/gradle.properties
quarkusPluginVersion=2.3.0.Final
rootProject/microservice/build.gradle.kts
plugins { id("quarkus-conventions") }
rootProject/settings.gradle.kts
include("microservice")
rootProject/build.gradle.kts
plugins { idea } repositories { mavenCentral() maven("https://plugins.gradle.org/m2/") gradlePluginPortal() } allprojects { apply(plugin = "idea") idea { module { isDownloadSources = true isDownloadJavadoc = true } } }
rootProject/gradle.properties
quarkusUniverseBomVersion=2.2.3.Final
解决方案
问题由两个原因共同导致:
- Quarkus的
quarkusDev任务运行时,需要在应用子项目的构建类路径中找到Quarkus Gradle插件本身,你当前仅将插件依赖放在了buildSrc的构建脚本依赖中,dev模式运行时无法扫描到该依赖。 - 你的Quarkus Gradle插件版本(2.3.0.Final)和Quarkus Universe BOM版本(2.2.3.Final)不统一,版本不匹配也会引发未知的兼容性问题。
按以下步骤修复即可正常运行:
- 首先统一版本,把
buildSrc/gradle.properties里的quarkusPluginVersion改成和根目录gradle.properties里的quarkusUniverseBomVersion一致,都设置为2.2.3.Final(也可以同步升级到同一个更高版本),避免版本兼容问题。 - 在
quarkus-conventions.gradle.kts的plugins块之后添加如下配置,显式将Quarkus Gradle插件依赖加入子项目的构建类路径:
buildscript { val quarkusPluginVersion: String by project repositories { mavenCentral() gradlePluginPortal() } dependencies { classpath("io.quarkus:gradle-application-plugin:${quarkusPluginVersion}") } }
修改完成后清除本地Gradle缓存,重新执行quarkusDev任务即可正常启动。
备选方案(更适合多项目统一维护)
如果不想在约定插件里加buildscript块,可以在根项目的settings.gradle.kts中添加pluginManagement配置统一管理插件版本:
pluginManagement { val quarkusPluginVersion: String by settings plugins { id("io.quarkus") version quarkusPluginVersion } repositories { mavenCentral() gradlePluginPortal() } }
之后把quarkusPluginVersion配置移到根目录的gradle.properties里统一维护即可,后续新增子项目不需要再重复配置版本。
内容的提问来源于stack exchange,提问作者code_name
相关产品推荐
相关产品推荐

