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
相关产品推荐
相关产品推荐

