SpringBoot+Gradle多模块项目构建问题及依赖传递咨询
Gradle多模块项目问题解决方案(SpringBoot+约定插件+KTS)
一、自定义插件「找不到实现类SpringbootConventionPlugin」问题解决
核心配置修正
在build-logic/convention/build.gradle.kts中,必须通过gradlePlugin块明确声明插件的ID与实现类全路径,同时确保模块应用正确的Gradle插件:
plugins { `java-gradle-plugin` // 提供插件开发基础支持 `kotlin-dsl` // 支持用KTS编写插件逻辑 } gradlePlugin { plugins { create("springbootConvention") { id = "com.yourproject.springboot-convention" // 自定义插件ID,供业务模块引用 implementationClass = "com.yourproject.convention.SpringbootConventionPlugin" // 插件类全限定路径 } } } dependencies { implementation(libs.spring.boot.gradle.plugin) implementation(libs.kotlin.gradle.plugin) }
类路径规范
将SpringbootConventionPlugin类放置在build-logic/convention/src/main/kotlin/com/yourproject/convention/目录下,保证类的包路径与implementationClass配置完全匹配。
二、依赖传递失效问题解决
1. 确保api配置生效
api依赖配置由java-library插件提供,因此需要在core:api模块中应用该插件:
// core/api/build.gradle.kts plugins { id("com.yourproject.springboot-convention") `java-library` // 必须应用此插件才能使用api依赖配置 } dependencies { api(libs.spring.boot.starter.web) // 用api声明需要向下传递的依赖 }
2. 正确声明模块依赖
在feature/article/api/build.gradle.kts中,使用api引入core:api模块,保证core:api的api依赖能传递到当前模块的上层消费者:
// feature/article/api/build.gradle.kts plugins { id("com.yourproject.springboot-convention") `java-library` } dependencies { api(project(":core:api")) // 用api传递模块依赖,而非implementation }
3. 检查约定插件配置
确保自定义的SpringbootConventionPlugin中没有修改依赖可见性的错误逻辑,比如不要强制将api配置替换为implementation:
// SpringbootConventionPlugin.kt class SpringbootConventionPlugin : Plugin<Project> { override fun apply(target: Project) { with(target) { plugins.apply("org.springframework.boot") plugins.apply("io.spring.dependency-management") plugins.apply("org.jetbrains.kotlin.jvm") // 针对api模块自动应用java-library插件 if (path.contains("-api")) { plugins.apply("java-library") } // 其他通用配置(如Kotlin版本、编码等) } } }
内容的提问来源于stack exchange,提问作者SageJustus
相关产品推荐
相关产品推荐

