You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根Gradle项目中应用Shadow插件时Quarkus的quarkusGenerateCode任务执行失败

根Gradle项目中应用Shadow插件时Quarkus的quarkusGenerateCode任务执行失败

我之前在维护混合Spring Boot和Quarkus的多模块Gradle项目时,也碰到过一模一样的问题——Shadow插件的类路径干扰导致Quarkus代码生成阶段出现Log4j2的方法找不到错误。其实核心原因是Shadow插件的依赖会渗透到所有子项目的类路径里,哪怕你在根项目里加了apply false,Quarkus的代码生成任务还是会意外加载到它的相关类,引发冲突。

解决方案:仅在Spring Boot子项目中应用Shadow插件

我们可以通过插件的声明与应用分离来解决这个冲突,让Shadow插件只在需要它的Spring Boot子项目中生效,完全不影响Quarkus子项目。

1. 保持根项目的插件声明(不变)

根build.gradle.kts的配置可以保留你原来的样子,确保Shadow插件只是声明但不全局应用:

plugins {
    kotlin("jvm") version "2.0.21"
    id("com.github.johnrengelman.shadow") version "8.1.1" apply false
    id("io.quarkus") version "3.18.2"
}

repositories {
    mavenCentral()
    gradlePluginPortal()
}

group = "com.example"
version = "1.0.0-SNAPSHOT"

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

2. 在Spring Boot子项目中单独应用Shadow插件

打开你的Spring Boot子项目的build.gradle.kts,在插件块中添加Shadow插件的应用,同时保留Spring Boot相关的插件配置:

plugins {
    id("org.springframework.boot") version "3.3.4" // 替换成你的Spring Boot版本
    id("io.spring.dependency-management") version "1.1.6" // 对应Spring Boot的依赖管理版本
    kotlin("jvm")
    id("com.github.johnrengelman.shadow") // 直接应用,版本由根项目声明控制
}

// 配置ShadowJar生成适合AWS Lambda的Fat Jar
shadowJar {
    archiveBaseName.set("your-spring-boot-lambda")
    archiveClassifier.set("all")
    // 如果需要,可以添加更多Shadow配置,比如排除不必要的依赖
}

// 可选:让build任务自动执行shadowJar
tasks.named("build") {
    dependsOn(tasks.named("shadowJar"))
}

3. 确保Quarkus子项目不引入Shadow插件

你的Quarkus子项目的build.gradle.kts只需要保留Quarkus和Kotlin插件,不要添加Shadow相关配置:

plugins {
    id("io.quarkus")
    kotlin("jvm")
}

// 其他Quarkus相关配置(依赖、任务自定义等)

额外排查(如果问题仍然存在)

如果还是遇到类冲突,可以尝试在Quarkus子项目中显式过滤掉Shadow相关的类路径:

tasks.withType<io.quarkus.gradle.tasks.QuarkusGenerateCode> {
    classpath = classpath.filter { file ->
        !file.name.contains("shadow") && !file.path.contains("shadow")
    }
}

这样配置后,Spring Boot子项目可以正常生成适合AWS Lambda的Fat Jar,而Quarkus的代码生成任务也不会再受Shadow插件的干扰,完美解决两者的共存问题。

备注:内容来源于stack exchange,提问作者Leo.Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 03:19:32