Java Javalin项目OpenApiPlugin未触发withDefinitionConfiguration,Swagger UI无API定义
我用Eclipse构建Gradle Java项目,基于Javalin做Web服务。近期升级OpenApi版本并引入OpenApiPlugin后,Swagger UI无法渲染API端点页面,提示**"No API definition provided"**,而且传入withDefinitionConfiguration的BiConsumer完全没被执行。怀疑是Eclipse处理Kotlin编译的OpenApiPlugin jar时出了问题,相关代码如下:
app = Javalin.create(config -> { config.registerPlugin(new OpenApiPlugin(openApiConfig -> { LOGGER.debug("###################### registerPlugin consumer called"); openApiConfig .withDocumentationPath(PATH_PREFIX+DOC_PATH) .withRoles(WebRole.ALL_ROLES) .withDefinitionConfiguration((version, definitionConfiguration) -> { LOGGER.debug("###################### withDefinition BiConsumer (is this called? - not yet - why?)"); definitionConfiguration .withServer(openApiServer -> { openApiServer.setUrl(SERVER_URL+PATH_PREFIX); }) .withInfo(openApiInfo -> { openApiInfo.setDescription("My Description"); openApiInfo.setVersion("1.1"); }); } ); }) ); config.registerPlugin(new SwaggerPlugin(swaggerConfiguration -> { swaggerConfiguration.setDocumentationPath(PATH_PREFIX+DOC_PATH); swaggerConfiguration.setUiPath(PATH_PREFIX+SWAGGER_PATH); })); for (JsonSchemaResource generatedJsonSchema : new JsonSchemaLoader().loadGeneratedSchemes()) { System.out.println(generatedJsonSchema.getName()); System.out.println(generatedJsonSchema.getContentAsString()); } });
排查与解决方案
修复代码语法错误
你提供的代码中,withDefinitionConfiguration的lambda表达式末尾缺少闭合括号,这会导致编译异常,插件初始化逻辑不完整。修正后补上闭合括号:.withDefinitionConfiguration((version, definitionConfiguration) -> { LOGGER.debug("###################### withDefinition BiConsumer (is this called? - not yet - why?)"); definitionConfiguration .withServer(openApiServer -> { openApiServer.setUrl(SERVER_URL+PATH_PREFIX); }) .withInfo(openApiInfo -> { openApiInfo.setDescription("My Description"); openApiInfo.setVersion("1.1"); }); })语法错误会直接导致插件配置逻辑无法正常执行,自然生成不了OpenApi定义。
同步Gradle依赖并验证版本兼容性
确认Javalin核心版本与OpenApi、Swagger插件版本完全匹配(比如Javalin 5.x对应OpenApiPlugin 5.x系列)。执行./gradlew clean build --refresh-dependencies强制刷新依赖,清除Eclipse可能缓存的旧jar包。检查Eclipse的Kotlin配置
打开Window > Preferences > Kotlin > Compiler,确保Kotlin编译器版本和OpenApiPlugin依赖的Kotlin版本一致(可通过./gradlew dependencies查看依赖树中org.jetbrains.kotlin:kotlin-stdlib的版本)。同时检查项目Java Build Path,确认Kotlin相关库已正确加入,无缺失或冲突。跳过Eclipse用命令行验证
执行./gradlew run直接启动项目,访问Swagger UI看是否正常。如果命令行运行正常,说明问题出在Eclipse缓存或配置上,可尝试删除工作区.metadata文件夹后重新导入项目。确认API端点的OpenApi注解
检查所有需要暴露的API端点是否添加了对应版本的OpenApi注解(如@OpenApi、@Api等),未添加注解的端点不会被纳入OpenApi定义,也会导致Swagger UI无内容。
内容的提问来源于stack exchange,提问作者Joel

