Springdoc在多模块Gradle项目中无法运行,寻求同类实践经验
我之前刚好在类似的多模块Gradle+Springdoc项目里踩过坑,给你分享下我当时的解决思路和配置要点:
1. 调整依赖层级与传递性
你现在把springdoc-openapi-ui放在API子模块,但Application作为Spring Boot的启动模块,必须确保能获取到Springdoc的依赖并加载其配置。这里有两种可行方案:
- 方案一:把
springdoc-openapi-ui(如果是新版本推荐用springdoc-openapi-starter-webmvc-ui)直接移到Application模块的依赖中; - 方案二:在API子模块里将依赖声明从
implementation改成api,让依赖能传递到上层的Application模块:
另外要注意:Application模块必须引入// module1/api/build.gradle api group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.4.2'spring-boot-starter-web,因为只有Web环境才能加载Swagger UI页面。
2. 确保API接口被Springdoc扫描到
Springdoc需要扫描到你的Controller类才能生成接口文档,所以要在Application模块的启动类上明确配置扫描路径:
@SpringBootApplication(scanBasePackages = {"com.yourcompany.module1.api", "com.yourcompany.module2.api"}) public class ApplicationStarter { public static void main(String[] args) { SpringApplication.run(ApplicationStarter.class, args); } }
如果所有模块的包路径有统一前缀(比如com.yourcompany),直接写scanBasePackages = "com.yourcompany"会更省心。
3. 统一管理Swagger配置类
如果需要自定义Swagger文档(比如设置标题、版本、全局参数等),建议把配置类放在Application模块,或者在API子模块中用@Component标记,确保能被启动模块扫描到。示例配置:
@Configuration public class OpenApiConfig { @Bean public OpenAPI customOpenAPI() { return new OpenAPI() .info(new Info() .title("多模块项目API文档") .version("1.0.0") .description("基于Gradle+Spring Boot+Springdoc的多模块项目接口文档")); } }
4. 检查Gradle模块依赖链路
确认Application模块的build.gradle已正确引入各个API子模块:
dependencies { implementation project(':module1:api') implementation project(':module2:api') // 其他基础依赖... }
同时子模块内部的依赖也要正确,比如module1/api依赖module1/domain时,要写implementation project(':module1:domain')。
5. 注意版本兼容性
你用的Springdoc 1.4.2对应Spring Boot 2.3.x~2.4.x版本区间,如果你的Spring Boot版本过高(比如2.7+),很可能出现兼容性问题。建议核对Springdoc官方的版本对应关系,比如Spring Boot 2.7+可以搭配Springdoc 1.6.x及以上版本的starter包。
如果调整后还是有问题,可以查看启动日志里是否有Springdoc相关的加载记录,或者尝试访问对应的Swagger UI地址:旧版本是http://localhost:8080/swagger-ui.html,新版本是http://localhost:8080/swagger-ui/index.html,看是否能正常打开。
内容的提问来源于stack exchange,提问作者patrickMo

