Maven转Gradle:多模块项目构建逻辑复用配置咨询
Gradle多模块Spring项目:统一配置与集中依赖管理解决方案
一、先搞定Version Catalog的全局配置
首先在项目根目录创建gradle/libs.versions.toml,集中管理所有版本和依赖:
[versions] kotlin = "1.9.20" springBoot = "3.2.0" java = "17" [libraries] kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web", version.ref = "springBoot" } [plugins] kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } spring-boot = { id = "org.springframework.boot", version.ref = "springBoot" } io.spring.dependency-management = { id = "io.spring.dependency-management", version = "1.1.4" }
要让buildSrc能访问这个Catalog,需要在buildSrc/settings.gradle.kts中配置:
dependencyResolutionManagement { versionCatalogs { create("libs") { from(files("../gradle/libs.versions.toml")) } } }
同时在buildSrc/build.gradle.kts中启用Kotlin DSL支持:
plugins { `kotlin-dsl` } repositories { mavenCentral() }
这样buildSrc里就能通过libs变量直接引用Catalog中的版本和依赖了。
二、编写约定插件统一子项目配置
在buildSrc/src/main/kotlin下创建约定插件类,比如com.example.conventions.JavaKotlinConventionPlugin.kt:
package com.example.conventions import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.JavaPluginExtension import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.libs import org.gradle.api.JavaVersion class JavaKotlinConventionPlugin : Plugin<Project> { override fun apply(project: Project) { project.run { // 应用基础插件 plugins.apply("java") plugins.apply(libs.plugins.kotlin.jvm.get().pluginId) plugins.apply(libs.plugins.io.spring.dependency-management.get().pluginId) // 统一Java版本 configure<JavaPluginExtension> { sourceCompatibility = JavaVersion.toVersion(libs.versions.java.get()) targetCompatibility = JavaVersion.toVersion(libs.versions.java.get()) } // 统一添加Kotlin核心依赖 dependencies { implementation(libs.kotlin.stdlib) implementation(libs.kotlin.reflect) } } } }
然后在buildSrc/src/main/resources/META-INF/gradle-plugins/com.example.conventions.java-kotlin.properties中注册插件:
implementation-class=com.example.conventions.JavaKotlinConventionPlugin
三、子项目快速应用统一配置
在根项目的build.gradle.kts中,让所有子项目自动应用约定插件:
subprojects { plugins.apply("com.example.conventions.java-kotlin") // 按需给特定子项目添加Spring Boot插件 if (name in listOf("web-module", "service-core")) { plugins.apply(libs.plugins.spring.boot.get().pluginId) } }
如果个别子项目有特殊需求,也可以在自己的build.gradle.kts中单独应用:
plugins { id("com.example.conventions.java-kotlin") id("org.springframework.boot") }
关键注意点
- Gradle 7.4及以上版本才支持在buildSrc中直接引用根目录的Version Catalog,确保你的Gradle版本达标。
- 约定插件里的所有版本和依赖都从Catalog读取,彻底避免硬编码,后续升级只需修改
libs.versions.toml。 - 若不需要buildSrc,也可以用included builds实现类似效果,但buildSrc对于轻量约定场景更简洁。
内容的提问来源于stack exchange,提问作者Dominic
相关产品推荐
相关产品推荐

