配置springdoc-openapi-gradle-plugin在Gradle构建后生成文档报错
Gradle构建后生成OpenAPI文件的任务依赖错误解决办法
问题情况
想在build任务跑完后自动生成OpenAPI文件,配置了这段代码:
tasks.named("build") { finalizedBy("generateOpenApiDocs") }
结果执行时报错:
Some problems were found with the configuration of task ':forkedSpringBootRun' (type 'JavaExecFork'). - Gradle detected a problem with the following location: '/Users/user/projects/service/build/classes/java/aot'. Reason: Task ':forkedSpringBootRun' uses this output of task ':compileAotJava' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.
试过给forkedSpringBootRun加doNotTrackState,没用,还是报同样的错。
解决办法
1. 给forkedSpringBootRun补全依赖
问题根源是forkedSpringBootRun(生成OpenAPI时启动应用的任务)用了compileAotJava的输出文件,但没告诉Gradle它依赖这个任务,导致Gradle没法保证任务执行顺序。直接添加依赖即可:
tasks.named("forkedSpringBootRun") { dependsOn(tasks.named("compileAotJava")) }
2. 换个方式关联build和generateOpenApiDocs
如果不是必须在build结束后强制执行,也可以让generateOpenApiDocs依赖build,代替finalizedBy:
tasks.named("generateOpenApiDocs") { dependsOn(tasks.named("build")) }
这样运行generateOpenApiDocs时会先完成build,Gradle也能自动处理内部任务的依赖顺序。
3. 关闭不必要的AOT编译(可选)
如果项目不需要AOT模式,直接在OpenAPI插件配置里关掉,就不会触发compileAotJava相关任务了:
openApi { aot { enabled = false } }
为啥之前的办法没用?
Gradle的增量构建靠任务间的依赖声明来保证执行顺序和缓存有效性。任务使用其他任务的输出却不声明依赖,Gradle就会报错防止构建结果混乱。doNotTrackState只是关掉任务的状态追踪,解决不了依赖缺失的根本问题。
内容的提问来源于stack exchange,提问作者pixel
相关产品推荐
相关产品推荐

