Kotlin Gradle构建生成GraphQL Schema类到Netflix包而非指定包
问题解决:DGS Codegen 生成类包名不符合预期
问题分析
你在多模块项目的application模块中执行./gradlew -p application clean bootJar时,发现GraphQL Schema生成的类默认进入com.netflix.dgs.codegen.generated包,而非指定的com.my.package。自己编写的GenerateJavaTask完全没生效——移除这些配置后,生成逻辑依然按默认包执行,原因在于:
- 自定义的
GenerateJavaTask只是空实现,没有实际调用DGS代码生成的核心逻辑; - DGS官方插件自带
generateJava任务,默认会自动执行,你的自定义任务根本没参与到构建流程中。
解决方案
直接配置DGS Codegen官方插件的扩展参数,无需自定义任务。以下是修正后的application/build.gradle.kts:
plugins { id("org.springframework.boot") id("com.netflix.dgs.codegen") version "5.6.3" id("io.spring.dependency-management") } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-jdbc") implementation("org.springframework.cloud:spring-cloud-starter-bootstrap:3.0.6") implementation("io.awspring.cloud:spring-cloud-starter-aws-parameter-store-config:2.3.5") implementation(group = "software.amazon.jdbc", name = "aws-advanced-jdbc-wrapper", version = "1.0.0") implementation(group = "org.postgresql", name = "postgresql", version = "42.5.0") implementation(platform("com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:5.4.2")) implementation("com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter") implementation("com.netflix.graphql.dgs:graphql-dgs-pagination") testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.2") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.2") } dependencyManagement { imports { mavenBom("com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:5.4.2") mavenBom("org.springframework.cloud:spring-cloud-dependencies:2020.0.6") mavenBom("io.awspring.cloud:spring-cloud-aws:2.3.5") } } // 配置DGS Codegen插件核心参数 dgsCodegen { schemaPaths = listOf("src/main/resources/schema") packageName = "com.my.package" generateClient = true } sourceSets { named("main") { java { // 加入DGS默认的代码生成目录,确保编译时能识别生成类 srcDir("build/generated-sources/dgs-codegen") srcDir("src/main/java") } resources { srcDir("src/main/resources") } } } // 让build任务依赖官方自带的generateJava任务 tasks.named("build") { dependsOn(tasks.named("generateJava")) }
关键修改点
- 移除了空实现的自定义任务,改用官方插件的
dgsCodegen扩展配置核心参数; - 通过
dgsCodegen明确指定目标包名、Schema路径和客户端生成开关; - 在源码集中添加DGS默认生成目录,确保生成类能被编译流程识别;
- 绑定官方
generateJava任务到构建流程,保证代码生成在编译前执行。
内容的提问来源于stack exchange,提问作者Laodao
相关产品推荐
相关产品推荐

