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

GitHub Actions中Gradle JavaExec依赖生成类编译失败问题

解决方案

问题根源

你的主代码(JsonSchemaGenerator)引用了generateJava任务生成的类,但compileJava任务并未明确依赖generateJava。本地运行正常是因为之前生成的类还存在,而GitHub Actions是全新环境,compileJava虽在generateJava之后执行,但未将生成目录纳入编译源,导致找不到依赖类。

修复步骤

1. 确保生成目录被添加到源码集

Netflix DGS插件通常会自动将生成目录加入源码集,若CI环境存在异常,可手动添加:

sourceSets.main.java.srcDirs += file("xyz-api/build/generated/sources/dgs-codegen")

或者动态绑定generateJava的输出目录,确保源码集自动同步:

tasks.generateJava.configure {
    outputs.dir(file("xyz-api/build/generated/sources/dgs-codegen"))
    doLast {
        sourceSets.main.java.srcDir(outputs.files.singleFile)
    }
}

2. 让compileJava明确依赖generateJava

强制compileJava必须在generateJava完成后执行,保证编译时能获取到最新生成的类:

tasks.compileJava.dependsOn(tasks.generateJava)

3. 优化printJsonSchema任务(可选)

无需手动添加生成目录到classpath,只要源码集配置正确,sourceSets.main.runtimeClasspath会自动包含编译后的生成类:

task printJsonSchema(type: JavaExec) {
    dependsOn tasks.compileJava // 确保编译完成后再执行
    group = "Execution"
    description = "Run schema printer task"
    classpath = sourceSets.main.runtimeClasspath
    mainClass = 'com.company.xyz_api.utils.JsonSchemaGenerator'
}

验证

修改后重新推送代码,GitHub Actions中compileJava会等待generateJava生成类并纳入源码集后再执行,即可解决找不到DealInternal类的编译错误。

内容的提问来源于stack exchange,提问作者andresmonc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:45:31